Commit c0a3fbd10536ba8a487a0f03afad094213f76da0
1 parent
48e1ba13
Add "howto" tutorials to check-tutorials target
Showing
10 changed files
with
302 additions
and
111 deletions
doc/source/users/tutorials/howto/extended_model.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | +<source_library title="source library"> | |
| 3 | + <source name="Src001" type="PointSource"> | |
| 4 | + <spectrum type="ExponentialCutoffPowerLaw"> | |
| 5 | + <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 6 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/> | |
| 7 | + <parameter name="CutoffEnergy" scale="1e7" value="1.0" min="0.01" max="1000.0" free="1"/> | |
| 8 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 9 | + </spectrum> | |
| 10 | + <spatialModel type="PointSource"> | |
| 11 | + <parameter name="RA" scale="1" value="266.424" free="1" /> | |
| 12 | + <parameter name="DEC" scale="1" value="-29.005" free="1" /> | |
| 13 | + </spatialModel> | |
| 14 | + </source> | |
| 15 | + <source name="Src002" type="PointSource"> | |
| 16 | + <spectrum type="PowerLaw"> | |
| 17 | + <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 18 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="5.0" free="1"/> | |
| 19 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 20 | + </spectrum> | |
| 21 | + <spatialModel type="PointSource"> | |
| 22 | + <parameter name="RA" scale="1" value="266.832" free="1" /> | |
| 23 | + <parameter name="DEC" scale="1" value="-28.146" free="1" /> | |
| 24 | + </spatialModel> | |
| 25 | + </source> | |
| 26 | + <source name="Src003" type="ExtendedSource" tscalc="1"> | |
| 27 | + <spectrum type="PowerLaw"> | |
| 28 | + <parameter name="Prefactor" scale="5.7e-18" value="1.0" min="0" max="1000.0" free="1"/> | |
| 29 | + <parameter name="Index" scale="-2.48" value="1.0" min="-4.0" max="4.0" free="1"/> | |
| 30 | + <parameter name="PivotEnergy" scale="300000" value="1.0" free="0" /> | |
| 31 | + </spectrum> | |
| 32 | + <spatialModel type="RadialDisk"> | |
| 33 | + <parameter name="RA" scale="1.0" value="266.3070" min="-360" max="360" free="1"/> | |
| 34 | + <parameter name="DEC" scale="1.0" value="-30.1876" min="-90" max="90" free="1"/> | |
| 35 | + <parameter name="Radius" scale="1.0" value="0.3" min="0.001" max="10" free="1"/> | |
| 36 | + </spatialModel> | |
| 37 | + </source> | |
| 38 | + <source name="IEM" type="DiffuseSource"> | |
| 39 | + <spectrum type="ConstantValue"> | |
| 40 | + <parameter name="Value" scale="1" value="1" min="1e-05" max="100000" free="1"/> | |
| 41 | + </spectrum> | |
| 42 | + <spatialModel type="MapCubeFunction" file="$CTADATA/models/cube_iem.fits"> | |
| 43 | + <parameter name="Normalization" scale="1" value="1" min="0.001" max="1000" free="0"/> | |
| 44 | + </spatialModel> | |
| 45 | + </source> | |
| 46 | + <source name="Background" type="CTACubeBackground" instrument="CTA"> | |
| 47 | + <spectrum type="PowerLaw"> | |
| 48 | + <parameter name="Prefactor" scale="1" value="1" min="0.01" max="100" free="1"/> | |
| 49 | + <parameter name="Index" scale="1" value="0" min="-5" max="5" free="1"/> | |
| 50 | + <parameter name="PivotEnergy" scale="1000000" value="1" min="0.01" max="1000.0" free="0"/> | |
| 51 | + </spectrum> | |
| 52 | + </source> | |
| 53 | +</source_library> | ... | ... |
doc/source/users/tutorials/howto/howto_connect_irfs.rst
| ... | ... | @@ -52,21 +52,11 @@ array: |
| 52 | 52 | Output event data file or observation definition XML file [north.fits] south.fits |
| 53 | 53 | |
| 54 | 54 | You now need to combine the information about these two observations in an |
| 55 | -observation definition XML file: | |
| 55 | +observation definition XML file. Let's put the following content in in the | |
| 56 | +``obs_irf.xml``: | |
| 56 | 57 | |
| 57 | -.. code-block:: xml | |
| 58 | - | |
| 59 | - <?xml version="1.0" standalone="no"?> | |
| 60 | - <observation_list title="observation library"> | |
| 61 | - <observation name="Crab" id="00001" instrument="CTA"> | |
| 62 | - <parameter name="EventList" file="north.fits"/> | |
| 63 | - <parameter name="Calibration" database="prod2" response="North_0.5h"/> | |
| 64 | - </observation> | |
| 65 | - <observation name="Crab" id="00002" instrument="CTA"> | |
| 66 | - <parameter name="EventList" file="south.fits"/> | |
| 67 | - <parameter name="Calibration" database="prod2" response="South_0.5h"/> | |
| 68 | - </observation> | |
| 69 | - </observation_list> | |
| 58 | +.. literalinclude:: obs_irf.xml | |
| 59 | + :language: xml | |
| 70 | 60 | |
| 71 | 61 | Each observation now has a ``Calibration`` parameter with the attributes |
| 72 | 62 | ``database`` and ``response``. | ... | ... |
doc/source/users/tutorials/howto/howto_extent.rst
| ... | ... | @@ -33,22 +33,12 @@ To do this, copy the 1DC :ref:`model definition <glossary_moddef>` file |
| 33 | 33 | |
| 34 | 34 | $ cp $CTOOLS/share/models/1dc_howto.xml extended_model.xml |
| 35 | 35 | |
| 36 | -and add the following source to it | |
| 37 | - | |
| 38 | -.. code-block:: xml | |
| 39 | - | |
| 40 | - <source name="Src003" type="ExtendedSource" tscalc="1"> | |
| 41 | - <spectrum type="PowerLaw"> | |
| 42 | - <parameter name="Prefactor" scale="5.7e-18" value="1.0" min="0" max="1000.0" free="1"/> | |
| 43 | - <parameter name="Index" scale="-2.48" value="1.0" min="-4.0" max="4.0" free="1"/> | |
| 44 | - <parameter name="PivotEnergy" scale="300000" value="1.0" free="0" /> | |
| 45 | - </spectrum> | |
| 46 | - <spatialModel type="RadialDisk"> | |
| 47 | - <parameter name="RA" scale="1.0" value="266.3070" min="-360" max="360" free="1"/> | |
| 48 | - <parameter name="DEC" scale="1.0" value="-30.1876" min="-90" max="90" free="1"/> | |
| 49 | - <parameter name="Radius" scale="1.0" value="0.3" min="0.001" max="10" free="1"/> | |
| 50 | - </spatialModel> | |
| 51 | - </source> | |
| 36 | +to :download:`extended_model.xml <extended_model.xml>` and add the following | |
| 37 | +source to it: | |
| 38 | + | |
| 39 | +.. literalinclude:: extended_model.xml | |
| 40 | + :language: xml | |
| 41 | + :lines: 26-37 | |
| 52 | 42 | |
| 53 | 43 | Then run :ref:`ctlike` to fit the parameters of ``Src003`` together with the |
| 54 | 44 | other source parameters | ... | ... |
doc/source/users/tutorials/howto/howto_ts.rst
| ... | ... | @@ -19,28 +19,13 @@ Copy the 1DC :ref:`model definition <glossary_moddef>` file |
| 19 | 19 | $ cp $CTOOLS/share/models/1dc_howto.xml ts_model.xml |
| 20 | 20 | |
| 21 | 21 | and modify the file by adding ``tscalc="1"`` to the ``<source>`` tag for |
| 22 | -source ``Src1``. Your | |
| 22 | +source ``Src1``. The first lines of the :download:`ts_model.xml <ts_model.xml>` | |
| 23 | 23 | :ref:`model definition XML file <glossary_moddef>` |
| 24 | 24 | should then look like this: |
| 25 | 25 | |
| 26 | -.. code-block:: xml | |
| 27 | - | |
| 28 | - <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 29 | - <source_library title="source library"> | |
| 30 | - <source name="Src001" type="PointSource" tscalc="1"> | |
| 31 | - <spectrum type="ExponentialCutoffPowerLaw"> | |
| 32 | - <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 33 | - <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/> | |
| 34 | - <parameter name="CutoffEnergy" scale="1e7" value="1.0" min="0.01" max="1000.0" free="1"/> | |
| 35 | - <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 36 | - </spectrum> | |
| 37 | - <spatialModel type="PointSource"> | |
| 38 | - <parameter name="RA" scale="1" value="266.424" free="1" /> | |
| 39 | - <parameter name="DEC" scale="1" value="-29.005" free="1" /> | |
| 40 | - </spatialModel> | |
| 41 | - </source> | |
| 42 | - ... | |
| 43 | - </source_library> | |
| 26 | +.. literalinclude:: ts_model.xml | |
| 27 | + :language: xml | |
| 28 | + :lines: 1-14 | |
| 44 | 29 | |
| 45 | 30 | Then run :ref:`ctlike` to compute the so-called Test Statistic, which is twice |
| 46 | 31 | the difference between the log-likelihood value obtained for a fit that includes | ... | ... |
doc/source/users/tutorials/howto/howto_tsmap.rst
| ... | ... | @@ -100,12 +100,13 @@ The figure below shows the resulting Test Statistic map. |
| 100 | 100 | cttsmap inobs=cntcube.fits inmodel=$CTOOLS/share/models/test_cube.xml srcname=Test expcube=expcube.fits psfcube=psfcube.fits bkgcube=bkgcube.fits nxpix=10 nypix=10 binsz=0.05 coordsys=GAL proj=CAR xref=0.0 yref=0.0 logL0=-447785.5939102234 binmin=70 binmax=80 outmap=tsmap_split_7.fits logfile=tsmap_split_7.log & |
| 101 | 101 | cttsmap inobs=cntcube.fits inmodel=$CTOOLS/share/models/test_cube.xml srcname=Test expcube=expcube.fits psfcube=psfcube.fits bkgcube=bkgcube.fits nxpix=10 nypix=10 binsz=0.05 coordsys=GAL proj=CAR xref=0.0 yref=0.0 logL0=-447785.5939102234 binmin=80 binmax=90 outmap=tsmap_split_8.fits logfile=tsmap_split_8.log & |
| 102 | 102 | cttsmap inobs=cntcube.fits inmodel=$CTOOLS/share/models/test_cube.xml srcname=Test expcube=expcube.fits psfcube=psfcube.fits bkgcube=bkgcube.fits nxpix=10 nypix=10 binsz=0.05 coordsys=GAL proj=CAR xref=0.0 yref=0.0 logL0=-447785.5939102234 binmin=90 binmax=100 outmap=tsmap_split_9.fits logfile=tsmap_split_9.log & |
| 103 | + wait | |
| 103 | 104 | |
| 104 | 105 | Now run the ASCII file by typing |
| 105 | 106 | |
| 106 | 107 | .. code-block:: bash |
| 107 | 108 | |
| 108 | - ./tsmap_commands.dat | |
| 109 | + $ ./tsmap_commands.dat | |
| 109 | 110 | |
| 110 | 111 | This will execute 10 :ref:`cttsmap` jobs in parallel. Each of the jobs will |
| 111 | 112 | compute 10 pixels of the Test Statistic map. You combine the resulting 10 | ... | ... |
doc/source/users/tutorials/howto/howto_ulimit.rst
| ... | ... | @@ -22,21 +22,12 @@ To do this, copy the 1DC :ref:`model definition <glossary_moddef>` file |
| 22 | 22 | |
| 23 | 23 | $ cp $CTOOLS/share/models/1dc_howto.xml ulimit_model.xml |
| 24 | 24 | |
| 25 | -and add the following source to it | |
| 26 | - | |
| 27 | -.. code-block:: xml | |
| 28 | - | |
| 29 | - <source name="Test" type="PointSource"> | |
| 30 | - <spectrum type="PowerLaw"> | |
| 31 | - <parameter name="Prefactor" value="1" scale="1.0e-20" min="0" free="1"/> | |
| 32 | - <parameter name="Index" value="1" scale="-2.48" min="-5" max="5" free="0"/> | |
| 33 | - <parameter name="PivotEnergy" value="1" scale="300000" free="0"/> | |
| 34 | - </spectrum> | |
| 35 | - <spatialModel type="PointSource"> | |
| 36 | - <parameter name="GLON" value="0.1" scale="1" free="0"/> | |
| 37 | - <parameter name="GLAT" value="0.4" scale="1" free="0"/> | |
| 38 | - </spatialModel> | |
| 39 | - </source> | |
| 25 | +to :download:`ulimit_model.xml <ulimit_model.xml>` and add the following | |
| 26 | +source to it: | |
| 27 | + | |
| 28 | +.. literalinclude:: ulimit_model.xml | |
| 29 | + :language: xml | |
| 30 | + :lines: 3-13 | |
| 40 | 31 | |
| 41 | 32 | Now run the :ref:`ctulimit` tool as follows: |
| 42 | 33 | ... | ... |
doc/source/users/tutorials/howto/obs_irf.xml
0 → 100644
| 1 | +<?xml version="1.0" standalone="no"?> | |
| 2 | +<observation_list title="observation library"> | |
| 3 | + <observation name="Crab" id="00001" instrument="CTA"> | |
| 4 | + <parameter name="EventList" file="north.fits"/> | |
| 5 | + <parameter name="Calibration" database="prod2" response="North_0.5h"/> | |
| 6 | + </observation> | |
| 7 | + <observation name="Crab" id="00002" instrument="CTA"> | |
| 8 | + <parameter name="EventList" file="south.fits"/> | |
| 9 | + <parameter name="Calibration" database="prod2" response="South_0.5h"/> | |
| 10 | + </observation> | |
| 11 | +</observation_list> | |
| 12 | + | ... | ... |
doc/source/users/tutorials/howto/ts_model.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | +<source_library title="source library"> | |
| 3 | + <source name="Src001" type="PointSource" tscalc="1"> | |
| 4 | + <spectrum type="ExponentialCutoffPowerLaw"> | |
| 5 | + <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 6 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/> | |
| 7 | + <parameter name="CutoffEnergy" scale="1e7" value="1.0" min="0.01" max="1000.0" free="1"/> | |
| 8 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 9 | + </spectrum> | |
| 10 | + <spatialModel type="PointSource"> | |
| 11 | + <parameter name="RA" scale="1" value="266.424" free="1" /> | |
| 12 | + <parameter name="DEC" scale="1" value="-29.005" free="1" /> | |
| 13 | + </spatialModel> | |
| 14 | + </source> | |
| 15 | + <source name="Src002" type="PointSource"> | |
| 16 | + <spectrum type="PowerLaw"> | |
| 17 | + <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 18 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="5.0" free="1"/> | |
| 19 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 20 | + </spectrum> | |
| 21 | + <spatialModel type="PointSource"> | |
| 22 | + <parameter name="RA" scale="1" value="266.832" free="1" /> | |
| 23 | + <parameter name="DEC" scale="1" value="-28.146" free="1" /> | |
| 24 | + </spatialModel> | |
| 25 | + </source> | |
| 26 | + <source name="IEM" type="DiffuseSource"> | |
| 27 | + <spectrum type="ConstantValue"> | |
| 28 | + <parameter name="Value" scale="1" value="1" min="1e-05" max="100000" free="1"/> | |
| 29 | + </spectrum> | |
| 30 | + <spatialModel type="MapCubeFunction" file="$CTADATA/models/cube_iem.fits"> | |
| 31 | + <parameter name="Normalization" scale="1" value="1" min="0.001" max="1000" free="0"/> | |
| 32 | + </spatialModel> | |
| 33 | + </source> | |
| 34 | + <source name="Background" type="CTACubeBackground" instrument="CTA"> | |
| 35 | + <spectrum type="PowerLaw"> | |
| 36 | + <parameter name="Prefactor" scale="1" value="1" min="0.01" max="100" free="1"/> | |
| 37 | + <parameter name="Index" scale="1" value="0" min="-5" max="5" free="1"/> | |
| 38 | + <parameter name="PivotEnergy" scale="1000000" value="1" min="0.01" max="1000.0" free="0"/> | |
| 39 | + </spectrum> | |
| 40 | + </source> | |
| 41 | +</source_library> | ... | ... |
doc/source/users/tutorials/howto/ulimit_model.xml
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | +<source_library title="source library"> | |
| 3 | + <source name="Test" type="PointSource"> | |
| 4 | + <spectrum type="PowerLaw"> | |
| 5 | + <parameter name="Prefactor" value="1" scale="1.0e-20" min="0" free="1"/> | |
| 6 | + <parameter name="Index" value="1" scale="-2.48" min="-5" max="5" free="0"/> | |
| 7 | + <parameter name="PivotEnergy" value="1" scale="300000" free="0"/> | |
| 8 | + </spectrum> | |
| 9 | + <spatialModel type="PointSource"> | |
| 10 | + <parameter name="GLON" value="0.1" scale="1" free="0"/> | |
| 11 | + <parameter name="GLAT" value="0.4" scale="1" free="0"/> | |
| 12 | + </spatialModel> | |
| 13 | + </source> | |
| 14 | + <source name="Src001" type="PointSource"> | |
| 15 | + <spectrum type="ExponentialCutoffPowerLaw"> | |
| 16 | + <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 17 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/> | |
| 18 | + <parameter name="CutoffEnergy" scale="1e7" value="1.0" min="0.01" max="1000.0" free="1"/> | |
| 19 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 20 | + </spectrum> | |
| 21 | + <spatialModel type="PointSource"> | |
| 22 | + <parameter name="RA" scale="1" value="266.424" free="1" /> | |
| 23 | + <parameter name="DEC" scale="1" value="-29.005" free="1" /> | |
| 24 | + </spatialModel> | |
| 25 | + </source> | |
| 26 | + <source name="Src002" type="PointSource"> | |
| 27 | + <spectrum type="PowerLaw"> | |
| 28 | + <parameter name="Prefactor" scale="1e-18" value="5.7" min="1e-07" max="1000.0" free="1"/> | |
| 29 | + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="5.0" free="1"/> | |
| 30 | + <parameter name="PivotEnergy" scale="1e6" value="0.3" min="0.01" max="1000.0" free="0"/> | |
| 31 | + </spectrum> | |
| 32 | + <spatialModel type="PointSource"> | |
| 33 | + <parameter name="RA" scale="1" value="266.832" free="1" /> | |
| 34 | + <parameter name="DEC" scale="1" value="-28.146" free="1" /> | |
| 35 | + </spatialModel> | |
| 36 | + </source> | |
| 37 | + <source name="IEM" type="DiffuseSource"> | |
| 38 | + <spectrum type="ConstantValue"> | |
| 39 | + <parameter name="Value" scale="1" value="1" min="1e-05" max="100000" free="1"/> | |
| 40 | + </spectrum> | |
| 41 | + <spatialModel type="MapCubeFunction" file="$CTADATA/models/cube_iem.fits"> | |
| 42 | + <parameter name="Normalization" scale="1" value="1" min="0.001" max="1000" free="0"/> | |
| 43 | + </spatialModel> | |
| 44 | + </source> | |
| 45 | + <source name="Background" type="CTACubeBackground" instrument="CTA"> | |
| 46 | + <spectrum type="PowerLaw"> | |
| 47 | + <parameter name="Prefactor" scale="1" value="1" min="0.01" max="100" free="1"/> | |
| 48 | + <parameter name="Index" scale="1" value="0" min="-5" max="5" free="1"/> | |
| 49 | + <parameter name="PivotEnergy" scale="1000000" value="1" min="0.01" max="1000.0" free="0"/> | |
| 50 | + </spectrum> | |
| 51 | + </source> | |
| 52 | +</source_library> | ... | ... |
test/tutorials.py
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | # ========================================================================== |
| 26 | 26 | import os |
| 27 | 27 | import sys |
| 28 | +import stat | |
| 28 | 29 | import subprocess |
| 29 | 30 | import gammalib |
| 30 | 31 | import ctools |
| ... | ... | @@ -49,6 +50,7 @@ class tutorials(gammalib.GPythonTestSuite): |
| 49 | 50 | # Initialise private members |
| 50 | 51 | self._rst_step = 0 # Step counter |
| 51 | 52 | self._rst_path = '' # Path where the tested RST file resides |
| 53 | + self._cwd = '.' # Current working directory | |
| 52 | 54 | |
| 53 | 55 | # Return |
| 54 | 56 | return |
| ... | ... | @@ -74,6 +76,9 @@ class tutorials(gammalib.GPythonTestSuite): |
| 74 | 76 | path : str |
| 75 | 77 | Result directory path |
| 76 | 78 | """ |
| 79 | + # Set default working directory | |
| 80 | + os.chdir(self._cwd) | |
| 81 | + | |
| 77 | 82 | # Create result directory |
| 78 | 83 | try: |
| 79 | 84 | os.makedirs(path) |
| ... | ... | @@ -111,7 +116,7 @@ class tutorials(gammalib.GPythonTestSuite): |
| 111 | 116 | cmdline = cmd.split(' ') |
| 112 | 117 | |
| 113 | 118 | # Check command line |
| 114 | - self.test_assert((len(cmdline) > 0), 'Test command.', cmd) | |
| 119 | + self.test_assert((len(cmdline) > 0), 'Test that command line is not empty.', cmd) | |
| 115 | 120 | |
| 116 | 121 | # Continue only if valid |
| 117 | 122 | if len(cmdline) > 0: |
| ... | ... | @@ -121,7 +126,7 @@ class tutorials(gammalib.GPythonTestSuite): |
| 121 | 126 | |
| 122 | 127 | # Handle "mkdir" command |
| 123 | 128 | if command == 'mkdir': |
| 124 | - self.test_value(len(cmdline), 2, 'Test command "mkdir".') | |
| 129 | + self.test_value(len(cmdline), 2, 'Test number of arguments for "mkdir".') | |
| 125 | 130 | self.test_value(len(args), 0, 'Test that no lines follow "mkdir".') |
| 126 | 131 | if len(cmdline) > 1: |
| 127 | 132 | dirname = gammalib.strip_whitespace(cmdline[1]) |
| ... | ... | @@ -129,15 +134,24 @@ class tutorials(gammalib.GPythonTestSuite): |
| 129 | 134 | |
| 130 | 135 | # Handle "cd" command |
| 131 | 136 | elif command == 'cd': |
| 132 | - self.test_value(len(cmdline), 2, 'Test command "cd".') | |
| 137 | + self.test_value(len(cmdline), 2, 'Test number of arguments for "cd".') | |
| 133 | 138 | self.test_value(len(args), 0, 'Test that no lines follow "cd".') |
| 134 | 139 | if len(cmdline) > 1: |
| 135 | 140 | dirname = gammalib.strip_whitespace(cmdline[1]) |
| 136 | 141 | os.chdir(dirname) |
| 137 | 142 | |
| 143 | + # Handle "cp" command | |
| 144 | + elif command == 'cp': | |
| 145 | + self.test_value(len(cmdline), 3, 'Test number of arguments for "cp".') | |
| 146 | + self.test_value(len(args), 0, 'Test that no lines follow "cp".') | |
| 147 | + if len(cmdline) > 2: | |
| 148 | + src = gammalib.expand_env(gammalib.strip_whitespace(cmdline[1])) | |
| 149 | + dst = gammalib.expand_env(gammalib.strip_whitespace(cmdline[2])) | |
| 150 | + os.system('cp %s %s' % (src, dst)) | |
| 151 | + | |
| 138 | 152 | # Handle "nano" command |
| 139 | 153 | elif command == 'nano': |
| 140 | - self.test_value(len(cmdline), 2, 'Test command "nano".') | |
| 154 | + self.test_value(len(cmdline), 2, 'Test number of arguments for "nano".') | |
| 141 | 155 | self.test_assert((len(args) > 0), 'Test that lines follow "nano".') |
| 142 | 156 | if len(cmdline) > 1: |
| 143 | 157 | fname = gammalib.strip_whitespace(cmdline[1]) |
| ... | ... | @@ -146,11 +160,22 @@ class tutorials(gammalib.GPythonTestSuite): |
| 146 | 160 | f.write(arg) |
| 147 | 161 | f.close() |
| 148 | 162 | |
| 149 | - # Handle special plotting scripts | |
| 163 | + # Handle script execution | |
| 150 | 164 | elif command[0:2] == './': |
| 151 | 165 | |
| 166 | + # Set script name. If the script does not exist in result | |
| 167 | + # directory then assume it exists in Sphinx rst directory | |
| 168 | + if os.path.isfile(command[2:]): | |
| 169 | + script = './%s' % (command[2:]) | |
| 170 | + else: | |
| 171 | + script = '%s/%s' % (self._rst_path, command[2:]) | |
| 172 | + | |
| 173 | + # Make sure that script is executable | |
| 174 | + mode = os.stat(script).st_mode | |
| 175 | + mode |= (mode & 0o444) >> 2 | |
| 176 | + os.chmod(script, mode) | |
| 177 | + | |
| 152 | 178 | # Build command line |
| 153 | - script = '%s/%s' % (self._rst_path, command[2:]) | |
| 154 | 179 | plotname, _ = os.path.splitext(command[2:]) |
| 155 | 180 | cmd = '%s -p %s.png' % (script, plotname) |
| 156 | 181 | self.test_assert((len(args) == 0), 'Test script "%s".' % command[2:]) |
| ... | ... | @@ -173,7 +198,7 @@ class tutorials(gammalib.GPythonTestSuite): |
| 173 | 198 | os.remove('tutorials_test_output.dmp') |
| 174 | 199 | |
| 175 | 200 | # Set error flag and text |
| 176 | - name = 'Test execution of %s.' % command[2:] | |
| 201 | + name = 'Test execution of "%s".' % command[2:] | |
| 177 | 202 | self.test_value(rc, 0, name, msg) |
| 178 | 203 | |
| 179 | 204 | # Handle plotting scripts |
| ... | ... | @@ -204,9 +229,13 @@ class tutorials(gammalib.GPythonTestSuite): |
| 204 | 229 | os.remove('tutorials_test_output.dmp') |
| 205 | 230 | |
| 206 | 231 | # Set error flag and text |
| 207 | - name = 'Test execution of %s.' % script | |
| 232 | + name = 'Test execution of "%s".' % script | |
| 208 | 233 | self.test_value(rc, 0, name, msg) |
| 209 | 234 | |
| 235 | + # Handle unsupported Xspec commands | |
| 236 | + elif command[0:5] == 'xspec': | |
| 237 | + pass | |
| 238 | + | |
| 210 | 239 | # Signal that the command was not known |
| 211 | 240 | else: |
| 212 | 241 | name = 'Test command "%s".' % command |
| ... | ... | @@ -288,13 +317,10 @@ class tutorials(gammalib.GPythonTestSuite): |
| 288 | 317 | arg = gammalib.strip_whitespace(line[pos+1:]) |
| 289 | 318 | args += '%s\n' % arg |
| 290 | 319 | |
| 291 | - # Debug: show tool | |
| 292 | - #print cmd, | |
| 293 | - | |
| 294 | 320 | # Create subprocess for tool |
| 295 | 321 | p = subprocess.Popen(cmd, stdout=subprocess.PIPE, |
| 296 | - stdin=subprocess.PIPE, | |
| 297 | - stderr=subprocess.PIPE) | |
| 322 | + stdin=subprocess.PIPE, | |
| 323 | + stderr=subprocess.PIPE) | |
| 298 | 324 | |
| 299 | 325 | # Write command line parameters |
| 300 | 326 | p.stdin.write(b'%s' % args) |
| ... | ... | @@ -305,9 +331,18 @@ class tutorials(gammalib.GPythonTestSuite): |
| 305 | 331 | # Close pipeline |
| 306 | 332 | p.stdin.close() |
| 307 | 333 | |
| 308 | - # Set error flag and text | |
| 309 | - name = 'Test execution of %s.' % tool | |
| 310 | - self.test_assert((len(res[1]) == 0), name, res[1]) | |
| 334 | + # Set error flag and message | |
| 335 | + if '*** ERROR' in res[0]: | |
| 336 | + success = False | |
| 337 | + msg = res[0] | |
| 338 | + elif len(res[1]) > 0: | |
| 339 | + success = False | |
| 340 | + msg = res[1] | |
| 341 | + else: | |
| 342 | + success = True | |
| 343 | + msg = '' | |
| 344 | + name = 'Test execution of "%s".' % tool | |
| 345 | + self.test_assert(success, name, msg) | |
| 311 | 346 | |
| 312 | 347 | # Preprend step counter to logfile |
| 313 | 348 | logfile = gammalib.GFilename('%s.log' % (cmd[0])) |
| ... | ... | @@ -436,11 +471,15 @@ class tutorials(gammalib.GPythonTestSuite): |
| 436 | 471 | """ |
| 437 | 472 | Set all test functions |
| 438 | 473 | """ |
| 474 | + # Set current working directory | |
| 475 | + self._cwd = os.path.abspath(os.getcwd()) | |
| 476 | + | |
| 439 | 477 | # Set test name |
| 440 | 478 | self.name('Tutorials Verification') |
| 441 | 479 | |
| 442 | 480 | # Append tutorials |
| 443 | 481 | self.append(self.tutorials_quickstart, 'Test quickstart tutorial') |
| 482 | + self.append(self.tutorials_howto, 'Test howto tutorial') | |
| 444 | 483 | self.append(self.tutorials_1dc, 'Test 1DC tutorial') |
| 445 | 484 | |
| 446 | 485 | # Return |
| ... | ... | @@ -452,14 +491,12 @@ class tutorials(gammalib.GPythonTestSuite): |
| 452 | 491 | Test quickstart tutorials |
| 453 | 492 | """ |
| 454 | 493 | # Set Sphinx rst file path |
| 494 | + os.chdir(self._cwd) | |
| 455 | 495 | path = os.path.abspath('../doc/source/users/tutorials/quickstart') |
| 456 | 496 | |
| 457 | 497 | # Set result directory |
| 458 | 498 | self._set_result_dir('tutorials/quickstart') |
| 459 | 499 | |
| 460 | - # Get current working directory | |
| 461 | - cwd = os.getcwd() | |
| 462 | - | |
| 463 | 500 | # Clean pfiles |
| 464 | 501 | self._clean_pfiles() |
| 465 | 502 | |
| ... | ... | @@ -467,22 +504,22 @@ class tutorials(gammalib.GPythonTestSuite): |
| 467 | 504 | self._rst_step = 0 |
| 468 | 505 | |
| 469 | 506 | # Test Sphinx rst files |
| 470 | - self._test_rst_file('%s/simulating.rst' % path) | |
| 471 | - self._test_rst_file('%s/selecting.rst' % path) | |
| 472 | - self._test_rst_file('%s/skymap.rst' % path) | |
| 473 | - self._test_rst_file('%s/binning.rst' % path) | |
| 474 | - self._test_rst_file('%s/response.rst' % path) | |
| 475 | - self._test_rst_file('%s/fitting.rst' % path) | |
| 476 | - self._test_rst_file('%s/residual_map.rst' % path) | |
| 507 | + self._test_rst_file('%s/simulating.rst' % path) | |
| 508 | + self._test_rst_file('%s/selecting.rst' % path) | |
| 509 | + self._test_rst_file('%s/skymap.rst' % path) | |
| 510 | + self._test_rst_file('%s/binning.rst' % path) | |
| 511 | + self._test_rst_file('%s/response.rst' % path) | |
| 512 | + self._test_rst_file('%s/fitting.rst' % path) | |
| 513 | + self._test_rst_file('%s/residual_map.rst' % path) | |
| 477 | 514 | self._test_rst_file('%s/residual_spectrum.rst' % path) |
| 478 | - self._test_rst_file('%s/butterfly.rst' % path) | |
| 479 | - self._test_rst_file('%s/spectrum.rst' % path) | |
| 480 | - self._test_rst_file('%s/unbinned.rst' % path) | |
| 515 | + self._test_rst_file('%s/butterfly.rst' % path) | |
| 516 | + self._test_rst_file('%s/spectrum.rst' % path) | |
| 517 | + self._test_rst_file('%s/unbinned.rst' % path) | |
| 481 | 518 | self._test_rst_file('%s/energy_dispersion.rst' % path) |
| 482 | - self._test_rst_file('%s/onoff.rst' % path) | |
| 519 | + self._test_rst_file('%s/onoff.rst' % path) | |
| 483 | 520 | |
| 484 | 521 | # Reset working directory |
| 485 | - os.chdir(cwd) | |
| 522 | + os.chdir(self._cwd) | |
| 486 | 523 | |
| 487 | 524 | # Return |
| 488 | 525 | return |
| ... | ... | @@ -499,15 +536,14 @@ class tutorials(gammalib.GPythonTestSuite): |
| 499 | 536 | os.environ['CTADATA'] = os.environ['CTADATA1DC'] |
| 500 | 537 | os.environ['CALDB'] = os.environ['CTADATA1DC']+'/caldb' |
| 501 | 538 | |
| 502 | - # Set Sphinx rst file path | |
| 503 | - path = os.path.abspath('../doc/source/users/tutorials/1dc') | |
| 539 | + # Set Sphinx rst file paths | |
| 540 | + os.chdir(self._cwd) | |
| 541 | + path_1dc = os.path.abspath('../doc/source/users/tutorials/1dc') | |
| 542 | + path_howto = os.path.abspath('../doc/source/users/tutorials/howto') | |
| 504 | 543 | |
| 505 | 544 | # Set result directory |
| 506 | 545 | self._set_result_dir('tutorials/1dc') |
| 507 | 546 | |
| 508 | - # Get current working directory | |
| 509 | - cwd = os.getcwd() | |
| 510 | - | |
| 511 | 547 | # Clean pfiles |
| 512 | 548 | self._clean_pfiles() |
| 513 | 549 | |
| ... | ... | @@ -515,17 +551,26 @@ class tutorials(gammalib.GPythonTestSuite): |
| 515 | 551 | self._rst_step = 0 |
| 516 | 552 | |
| 517 | 553 | # Test Sphinx rst files |
| 518 | - self._test_rst_file('%s/first_select_obs.rst' % path) | |
| 519 | - self._test_rst_file('%s/first_select_events.rst' % path) | |
| 520 | - self._test_rst_file('%s/first_skymap.rst' % path) | |
| 521 | - self._test_rst_file('%s/first_detect.rst' % path) | |
| 522 | - self._test_rst_file('%s/first_stacked.rst' % path) | |
| 523 | - self._test_rst_file('%s/first_fitting.rst' % path) | |
| 524 | - self._test_rst_file('%s/first_improving.rst' % path) | |
| 525 | - self._test_rst_file('%s/first_unbinned.rst' % path) | |
| 554 | + self._test_rst_file('%s/first_select_obs.rst' % path_1dc) | |
| 555 | + self._test_rst_file('%s/first_select_events.rst' % path_1dc) | |
| 556 | + self._test_rst_file('%s/first_skymap.rst' % path_1dc) | |
| 557 | + self._test_rst_file('%s/first_detect.rst' % path_1dc) | |
| 558 | + self._test_rst_file('%s/first_stacked.rst' % path_1dc) | |
| 559 | + self._test_rst_file('%s/first_fitting.rst' % path_1dc) | |
| 560 | + self._test_rst_file('%s/first_improving.rst' % path_1dc) | |
| 561 | + self._test_rst_file('%s/first_unbinned.rst' % path_1dc) | |
| 562 | + | |
| 563 | + # Test Sphinx rst files | |
| 564 | + self._test_rst_file('%s/howto_ts.rst' % path_howto) | |
| 565 | + self._test_rst_file('%s/howto_tsmap.rst' % path_howto) | |
| 566 | + self._test_rst_file('%s/howto_extent.rst' % path_howto) | |
| 567 | + self._test_rst_file('%s/howto_ulimit.rst' % path_howto) | |
| 568 | + self._test_rst_file('%s/howto_lightcurve.rst' % path_howto) | |
| 569 | + self._test_rst_file('%s/howto_phasecurve.rst' % path_howto) | |
| 570 | + self._test_rst_file('%s/howto_exclude.rst' % path_howto) | |
| 526 | 571 | |
| 527 | 572 | # Reset working directory |
| 528 | - os.chdir(cwd) | |
| 573 | + os.chdir(self._cwd) | |
| 529 | 574 | |
| 530 | 575 | # Clean pfiles |
| 531 | 576 | self._clean_pfiles() |
| ... | ... | @@ -534,12 +579,43 @@ class tutorials(gammalib.GPythonTestSuite): |
| 534 | 579 | self._rst_step = 0 |
| 535 | 580 | |
| 536 | 581 | # Test Sphinx rst file for On/Off analysis |
| 537 | - self._test_rst_file('%s/first_onoff.rst' % path) | |
| 582 | + self._test_rst_file('%s/first_onoff.rst' % path_1dc) | |
| 583 | + | |
| 584 | + # Reset working directory | |
| 585 | + os.chdir(self._cwd) | |
| 586 | + | |
| 587 | + # Return | |
| 588 | + return | |
| 589 | + | |
| 590 | + # Test howto tutorials | |
| 591 | + def tutorials_howto(self): | |
| 592 | + """ | |
| 593 | + Test howto tutorials | |
| 594 | + """ | |
| 595 | + # Set Sphinx rst file path | |
| 596 | + os.chdir(self._cwd) | |
| 597 | + path = os.path.abspath('../doc/source/users/tutorials/howto') | |
| 598 | + | |
| 599 | + # Set result directory | |
| 600 | + self._set_result_dir('tutorials/howto') | |
| 601 | + | |
| 602 | + # Initialise step counter | |
| 603 | + self._rst_step = 0 | |
| 604 | + | |
| 605 | + # Test Sphinx rst files | |
| 606 | + self._clean_pfiles() | |
| 607 | + self._test_rst_file('%s/howto_connect_irfs.rst' % path) | |
| 608 | + self._clean_pfiles() | |
| 609 | + self._test_rst_file('%s/howto_xspec.rst' % path) | |
| 610 | + | |
| 611 | + # Reset working directory | |
| 612 | + os.chdir(self._cwd) | |
| 538 | 613 | |
| 539 | 614 | # Return |
| 540 | 615 | return |
| 541 | 616 | |
| 542 | 617 | |
| 618 | + | |
| 543 | 619 | # ======================== # |
| 544 | 620 | # Main routine entry point # |
| 545 | 621 | # ======================== # | ... | ... |