Pipeline
========
.. warning::
The following guide explains how to install, setup, and run the LESIA pipeline as an integrated part of PLATOnium. **A (Linux) bash shell is required to install this setup** since this tool should be used on a computing cluster where Linux is the standard. Mac users may have to adapt especially the ``setup.py`` script.
In order to have a frozen functional setup between PlatoSim/PLATOnium and the LESIA pipeline, the lastest tested versions are:
**PlatoSim develop branch:**
.. code-block:: shell
git checkout 3.6.0-225-g552813f9
**LESIA SVN pipeline**
.. code-block:: shell
svn checkout 5420
.. raw:: html
.. _pipeline_run:
*Installation*
--------------
The LESIA pipeline is a SVN (subversion) repository, hence, if not installed, first install SVN
.. code-block:: shell
sudo apt update
sudo apt install subversion -y
Confirm the installation by viewing the version: ``svn --version``.
Next create a directory called ``plato``. Users are recommended to create this folder in the ``$PLATO_PROJECT_HOME`` directory. Developers are on the other hand encouraged to place this folder in the same (software) directory to where ``PlatoSim3`` is located. Hence, type:
.. code-block:: shell
mkdir
cd
Now download the SVN repository by providing your ``username`` and ``password`` (contact the LESIA team for the credentials):
.. code-block:: shell
svn checkout https://version-lesia.obspm.fr/repos/PLATO/algorithms/ --username --password
If you are a user, first download the script (`setup.sh script from Github `_) and place it in your ``$PLATO_PROJECT_HOME`` directory. Being a developer, this script already exists.
To setup and install the pipeline, two arguments need to be parsed; the first being the path to your PlatoSim working directory (````) and the second being the path to your newly created **plato** folder (````). Thus, simply run:
.. code-block:: shell
./setup
This script will create a ``.bash_profile`` file in the ``$PLATO_PROJECT_HOME`` directory and:
- Export the environment variable ``$PLATO_PROJECT_HOME``
- Export the environment variable ``$PLATO_WORKDIR``
- Export the environment variable ``$PLATO``
- Export the environment variable ``$PYTHONPATH``
- Create the directory tree needed to install the LESIA pipeline
- Installs the LESIA pipeline
- Make the LESIA pipeline scripts globally executable
- Make the PLATOnium scripts globally executable
If you want to change your working directory at a later stage, simply run ``setup.sh`` again. The script will automatically detect that the LESIA pipeline is already installed. You can force a new install of the LESIA pipeline by parsing the argument ``--reinstall``.
.. warning::
In case of installation errors, we recomment to pin down the issue by installing each dependency one-by-one. Have a look inside the file ``$PLATO/algorithms/Makefile``. This file contains the instructions for ``make install`` and ``make clean``.
Moreover, well known problems with the installation can be found in the :ref:`Troubleshooting ` section below.
.. admonition:: Update the LESIA pipeline:
To update the SVN repository, simply go to ``cd $PLATO/algortihms`` and do:
.. code-block:: shell
svn update
sudo make
To checkout a specific revision use:
.. code-block:: shell
svn checkout
.. raw:: html
.. _pipeline_run:
*Run examples*
--------------
Compared to the previous tutorial on how to run ``platonium``, we now only have to parse the ``--pipeline --sample `` to activate the LESIA pipeline. If ``P1`` is parsed, the on-ground pipeline is activated, and if ``P5`` is parsed, the on-board pipeline is activated. E.g. say that we already made two seperate stellar catalogues of respectively P1 and P5 sample stars using ``picsim``. A simple test of 30 exposures for each chain of the pipeline looks like the following:
.. code-block::
platonium 1 1 1 1 --project --pipeline --sample P1 --nexp 30
platonium 1 1 1 1 --project --pipeline --sample P5 --nexp 30
Note that a lot of information is printed to bash. When running on a computing cluster, this behavior is typically not desired and hence the flag ``-v 0`` avoid printing to bash.
.. raw:: html
.. _pipeline_output:
*Output files*
--------------
During a simulation, PLATOnium creates three folders called ``reduced``, ``microscan``, ``P1`` (or ``P5`` depending on sample parsed). By default during the run a lot of files are created and stored in ``microscan`` and ``P1``, but at end simulation, the final files are stored into ``reduced``. Note that these foder contains a tree of subfolders to keep each simulation isolated when running in parallel. A standard filename is used for each data product, e.g. the light curve file ``000000001_Ncam1.1_Q1.ftr`` refers to the star ID (``000000001``), the N-CAM camera-group no. and camera no. (``Ncam1.1``), and the quarter (``Q1``).
**Unique files returned after a P1 sample run:**
* Final extracted P1 sample data with the following columns (``*.ftr``):
- ``time`` : [second] Time points with zero-point at mission BOL
- ``flux`` : [electron] Extracted flux
- ``cx`` : [pixel] X centroid pixel within 6x6 pixel subfield
- ``cy`` : [pixel] Y centroid pixel within 6x6 pixel subfield
- ``bg`` : [electron] Background flux
- ``flux_err`` : [electron] Flux error
- ``cx_err`` : [pixel] X centroid pixel error
- ``cy_err`` : [pixel] Y centroid pixel error
- ``bg_err`` : [electron] Background flux error
- ``chi2`` : Chi-sqaured of PSF fit
- ``iter`` : Iterations before convergecne for PSF fitting
**Unique files returned after a P5 sample run:**
* Final extracted P5 sample data with the following columns (``*.ftr``):
- ``time`` : [second] Time points with zero-ponint at mission BOL
- ``flux`` : [electron] Extracted and corrected flux
- ``xc`` : [pixel] X centroid pixel within 6x6 pixel subfield
- ``yc`` : [pixel] Y centroid pixel within 6x6 pixel subfield
- ``flux_cor`` : [norm.] Flux model for jitter/drift correction
* Mask-update file for each target star (Marchiori+2019; ``*.fits``).
* Stellar Polution Ratio (SPR) information of target star as per Marchiori+2019 (``*.spr``).
**Files indentical for P1 and P5 sample:**
* An overview table (in feather format) of the simulation (``*.table``):
- ``ID`` : Star ID of nine digits
- ``PIC`` : PIC name of target
- ``ra`` : [degree] ICRS Right Ascension
- ``dec`` : [degree] ICRS Declination
- ``mag`` : PALTO passband magnitude P
- ``group`` : Camera-group ID
- ``camera`` : Camera ID
- ``quarter`` : Mission quarter number
- ``ccd`` : CCD ID for star (subfield) location
- ``xCCD`` : [pixel] X centroid pixel coordinate of full frame CCD of first image
- ``yCCD`` : [pixel] Y centroid pixel coordinate of full frame CCD of first image
- ``rOA`` : [degree] Radial distance to optica axis
- ``xFP`` : [millimeter] X focal plane coordinate of first image
- ``yFP`` : [millimeter] Y focal plane coordinate of first image
- ``ncon`` : Number of contaminants in subfield
* Information about the PSF inversion (``*.invert``). For more information see: PLATO-PL-LESIA-TN-0069 and PLATO-PL-LESIA-TN-0070.
.. raw:: html
.. _platonium_pipeline_troubleshooting:
*Troubleshooting*
-----------------
.. _platonium_pipeline_troubleshooting_python:
Installation errors: Python
...........................
**pymt64:** The package ``pymt64`` can sometimes cause porblems. A well known issue for this pacakage is the following error:
.. code-block:: shell
import pymt64
File "pymt64.pyx", line 1, in init pymt64
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject
This can be solved by re-installing the library:
.. code-block:: shell
pip uninstall pymt64
pip install --no-cache-dir pymt64
.. _platonium_pipeline_troubleshooting_makefile:
Installation errors: Makefile
.............................
A few obstacles can happen writing a code assuming full sudo rights (and assuming that apt get is available). In order to successfully install the LESIA pipeline on a cluster, the following ajustments may need to be inforced:
**Disabled environment:** Make sure that the ``$PLATO`` path is defined. If added to your ``.bash_profile`` file this path should automatically be loaded every time you enter a compute node on any machine/cluster. However, it occured that it was not and the installation will link to a wrong location and fail.
**aswsim3:** This library ``aswsim3`` sometimes cause problems and since we do not need to PLATOnium we can simply skip this library. However, ``aswsim3`` depends on the library ``platosimlib``, hence, simply replace ``aswsim3`` with ``platosimlib`` in the section ``install: all`` listed within in ``Makefile``. Note the problem is typically that GLS packages cannot be found here, like:
.. code-block:: shell
../src/test_gsl.c:2:24: fatal error: gsl_matrix.h: No such file or directory
#include
**OpenBLAS vs. BLAS/LAPACK:** If using OpenBLAS as a BLAS (and LAPACK) implementation the ``-lblas`` and ``-llapack`` link arguments would be appropriate when linking to the reference BLAS/LAPACK libraries from NetLib, which are typically called ``libblas.so`` and ``liblapack.so``. However, with OpenBLAS both are in the same shared library called ``libopenblas.so``.
1. The first installation error you may encounter is thus from the library ``WP/326100/spline2dbase``. This library uses the ``setup.py`` script within for the installation which link to the ``-lblas`` and ``-llapack``. Thus, if using OpenBLAS you will need to replace ``-lblas`` and ``-llapack`` with ``openblas`` in the following line:
.. code-block:: shell
libraries=["m","blas","lapack"],
to
.. code-block:: shell
libraries=["m","openblas"],
For the rest of the libraries you need to look into the ``Makefile`` of each package.
2. Within the main installation Makefile (``$PLATO/algorithms/Makefile``) the inversion modules named ``WP/32100/voxel/..`` link to the openblas libray. If you get a message that ``-llapack not found`` then a potential solution is to remove this flag completely since it is already included within openblas. Hence remove ``-llapack`` from the following line in each file you encounter this error:
.. code-block:: shell
LDLIBS = -lcvxs -lm -llapack -lopenblas -lpthread
**Man pages:** Since the user do not generally have sudo right on a computing cluster the inversion module tries to install the man pages for the packges ``WP/32100/voxel/..``. This can result in the following error:
.. code-block:: shell
warning: failed to load external entity "/usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl"
cannot parse /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl
These are really not needed for our computations and hence
1. Remove the ``.1`` and ``.txt`` files from ``all :`` that will be installed
2. Comment out the line ``install -m 644 combine-mat.1 $(PLATOMAN1)/..``
3. Run ``make install`` again
.. _platonium_pipeline_troubleshooting_executables:
Run error: Executables missing
..............................
Sometimes the following scripts: ``combine-mat``, ``invert-rls``, ``spline2real``, and ``find-amp`` cannot be found globally (typically true on a computing cluster by the local node you are running simulations on). By default these scripts are installed into your ``$PLATO/bin`` folder, however, the script ``setup.sh`` should take care of copying these files to your Conda environment **bin** folder.
If the above script are not directly executeable from bash (e.g. ``combine-mat -h``) then the PLATOnium setup script most likely failed. Thus, simply copy all of these files to your Conda environment **bin** folder. You can find this location by first activating your Conda environment and thereafter type ``which python``. Copy the files into the **bin** folder and not the **bin/python** folder!