diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..babbb94 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,38 @@ +name: ci + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11"] + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ".[test]" + + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + + - name: Test with pytest + run: | + pytest tests diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..7366f11 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: sphinxdocumentation + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.11" + + + - name: Install docs dependencies + run: | + pip install --upgrade pip + pip install -e ".[docs]" + + - name: Build docs + working-directory: ./docs + run: | + make html +# uses: ammaraskar/sphinx-action@master +# with: +# docs-folder: "docs/" + + # Publish built docs to gh-pages branch. + # =============================== + - name: Commit documentation changes + run: | + git clone https://github.com/ammaraskar/sphinx-action-test.git --branch gh-pages --single-branch gh-pages + cp -r docs/_build/html/* gh-pages/ + cd gh-pages + touch .nojekyll + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add . + git commit -m "Update documentation" -a || true + # The above command will fail if no changes were present, so we ignore + # that. + - name: Push changes + uses: ad-m/github-push-action@master + with: + branch: gh-pages + directory: gh-pages + github_token: ${{ secrets.GITHUB_TOKEN }} + force: true + # =============================== diff --git a/.gitignore b/.gitignore index b6e4761..5a19920 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -26,6 +27,7 @@ share/python-wheels/ .installed.cfg *.egg MANIFEST +*_version.py # PyInstaller # Usually these files are written by a python script from a template @@ -70,6 +72,7 @@ instance/ # Sphinx documentation docs/_build/ +docs/api/ # PyBuilder target/ diff --git a/README.rst b/README.rst index 58f9c6f..1aef9fc 100644 --- a/README.rst +++ b/README.rst @@ -7,13 +7,15 @@ TRAP is novel algorithm used to detect exoplanets in high-contrast imaging data, in the time-domain. The main benefit of this new approach is that it works significantly better for companion signals very close to the central star. For a detailed description please refer to `Samland et al. 2021 `_. -TRAP can currently only be installed from source and requires at least Python 3.5 or higher. We recommend using the "pip install" or "pip install -e ." command (if you want to make changes to the code base) in the directory containing the "setup.py" file. -TRAP is using Ray for multiprocessing, we recommend installing it via 'pip install -U "ray[default]"' to get access to the dashboard for monitoring utilities. +TRAP requires at least Python 3.8 or higher (3.12 will be supported soon). The latest version can be installed using "pip install git+https://github.com/m-samland/trap/". +If the user wishes to contribute or change the code, we recommend cloning the repository and using the "pip install -e ." command. + +TRAP is using Ray for multiprocessing. If you are using a cluster, please make sure that Ray is installed on the cluster as well. The package has been tested on Linux/iOS/Windows with the packages provided in any recent version of Conda. Please provide feedback if there are issues installing the package on your system. -A detailed documentation website is not available at the moment. Please refer to the in-code documentation and the tutorial notebook containing a simple example based on the test data included in the package. +Please make use of the tutorial notebook in the examples folder explaining how to use TRAP. The folder also contains data from the VLT/SPHERE instrument needed for the tutorial. Dependencies ------------ diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..3d05e35 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,53 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'my_package' +copyright = '2022, Author Name' +author = 'Author Name' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx_automodapi.automodapi' +] +numpydoc_show_class_members = False + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..97f48f9 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,67 @@ +.. my_package documentation master file, created by + sphinx-quickstart on Tue Mar 22 13:13:41 2022. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to my_package's documentation! +====================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + +Here is where you can write the documentation for your package. + + +Usage +===== + +.. _installation: + +Installation +------------ + +To use `my_package` you need to install X, Y and Z. + + +.. _code: + +Code +---- + +Here is an example of describing the use of your function. + +To add one to a number you can use the ``my_package.add_one()`` function: + +.. py:function:: my_package.add_one(number) + + + :param number: Should be integer, floating point number or a string. + + If ``number`` is not one of these types, an exception will be raised: + + .. py:exception:: TypeError + + Raised if the input is invalid. + +More about how to describe code can be hound +`here `_ + + +.. + The following section creates an index, a list of modules and a + search page. + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +.. + The following will add the signature of the individual functions and pull + their docstrings. + +.. automodapi:: my_package.example diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..8084272 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/trap/test_data/parallactic_angles.fits b/examples/test_data/parallactic_angles.fits similarity index 100% rename from trap/test_data/parallactic_angles.fits rename to examples/test_data/parallactic_angles.fits diff --git a/trap/test_data/psf_model.fits b/examples/test_data/psf_model.fits similarity index 100% rename from trap/test_data/psf_model.fits rename to examples/test_data/psf_model.fits diff --git a/trap/test_data/science_cube.fits b/examples/test_data/science_cube.fits similarity index 100% rename from trap/test_data/science_cube.fits rename to examples/test_data/science_cube.fits diff --git a/examples/tutorial.ipynb b/examples/tutorial.ipynb new file mode 100644 index 0000000..401b059 --- /dev/null +++ b/examples/tutorial.ipynb @@ -0,0 +1,2120 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to use TRAP for reducing direct imaging data: a simple example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook shows how to apply the TRAP algorithm (Samland et al. 2020) to data that is shifted and pre-aligned with the center of the images. The data included in this package for testing and demonstration purposes is the same (cropped) VLT/SPHERE-IRDIS 51 Eridani b data in the K1 band that has been used in the paper describing the algorithm. This notebook can be used as reference for your own data and data reduction. Don't be scared by the text, this is mostly to provide additional information to, hopefully, mostly self-explanatory docstring and to describe the workflow and caveats. Running the reduction itself is very straightforward. Before going through this notebook, please make sure you installed the package formally using \"pip install .\" in the downloaded git folder, or using the \"-e\" option if you're going to change the code-base itself.\n", + "\n", + "Let us start by importing everything we need from generic packages used for data manipulation / plotting and some useful high-level functionality from TRAP. The \"pkg_resource\" package is only used for locating the test data included in this package. If you want to run and modify this notebook, please download it and put it somewhere where you keep your science stuff, you don't want to manipulate it in the git folder since that is messy. :)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from astropy import units as u\n", + "from astropy.io import fits" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "from trap.parameters import Instrument, Reduction_parameters\n", + "from trap.plotting_tools import plot_scale\n", + "from trap.reduction_wrapper import run_complete_reduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the Instrument and Reduction parameters\n", + "\n", + "We need the pipeline to be aware of some attributes of the instrument we are using, like the pixel scale to translate coordinates and angular sizes, and the telescope diameter which is needed to compute the theoretical size of the point-spread function of the telescope. For this we create an Instrument-class object. Detector properties such as the read-noise and gain can be additionally specified if you want TRAP to take them into account when modeling the systematics. If you provide a variance data cube that already contains all the uncertainties of the input data later in, just leave them on their default value so that you do not take them into account twice. The example given below is for the test data packaged with the pipeline." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "used_instrument = Instrument(\n", + " name='IRDIS',\n", + " wavelengths=np.array([2.11]) * u.micron,\n", + " pixel_scale=u.pixel_scale(0.01225 * u.arcsec / u.pixel),\n", + " telescope_diameter=7.99 * u.m,\n", + " detector_gain=1.75,\n", + " readnoise=6)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we need to specify the details of the reduction parameters, i.e. what type of TRAP reduction to we want to perform? What separation range do we want to look at? How should the training set (the reference pixels) be selected on which to train the systematics lightcurve model on? Everything related to the reduction in summarized in the \"Reduction_parameters\"-class. To be honest it is a bit unwieldy with a lot of things that can be tweak and including parameters for functions that are currently still in the testing and developing stage. In general however, the default values should be sensible for most applications and correspond mostly to the settings as shown in the paper. For now we will stick with the default parameters and only explicitly define some parameters that you are likely to play around with or *actually* need to change for your own reduction. We'll dump the results in our home directory for now, but of course you're free to change this!" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "result_folder = os.path.join(str(Path.home()), 'trap_test_reduction')" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "reduction_parameters = Reduction_parameters(\n", + " search_region_inner_bound=1,\n", + " search_region_outer_bound=10,\n", + " right_handed=True,\n", + " include_noise=False,\n", + " yx_known_companion_position=[-35.95, -8.43],\n", + " known_companion_contrast=None,\n", + " use_multiprocess=True,\n", + " ncpus=4,\n", + " result_folder=result_folder,\n", + " # Reduction and signal masks\n", + " autosize_masks_in_lambda_over_d=True,\n", + " reduction_mask_size_in_lambda_over_d=1.1,\n", + " signal_mask_size_in_lambda_over_d=2.1,\n", + " reduction_mask_psf_size=19,\n", + " signal_mask_psf_size=19,\n", + " # Regressor stuff\n", + " annulus_width=5,\n", + " add_radial_regressors=True,\n", + " include_opposite_regressors=True,\n", + " # Contrast curve / normalization stuff\n", + " contrast_curve=True,\n", + " contrast_curve_sigma=5.,\n", + " normalization_width=3,\n", + " companion_mask_radius=11)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## To explain the above parameters in a bit more detail than what the docstrings say, they should be mostly self-explanatory, but still!\n", + "\n", + "- The first two \"search_region\"-parameters define the inner and outer separation for the final detection map that will be created, i.e. this is the separation range (in pixel) in which we will search for companions. As noted in the paper, TRAP can get quite slow if we choose a large outer bound, but in general we don't really care about large separations because TRAP, as a temporal model, is expected to perform better at small separations and loses its edge far out.\n", + "\n", + "- The \"right_handed\"-parameter gives the rotation direction of the field-of-view... Honestly, if you're working with a new instrument you just have to try it out, best with a data set where you know that there is a companion so you can check. It depends on the definition of parallactic angles used and exactly how the instrument is designed. For data produced by the SPHERE Data Center the parallactic angles work such, that \"right_handed\" is True, but for most other data I tried TRAP on it was the other way around.\n", + "\n", + "- Since TRAP creates a time-series model for a pixel and is trained by non-local pixels, it is important to excluded known companions from the training data. The \"yx_known_companion_position\" allows you to specifiy the relative position of a companion to be excluded from the regressor selection (otherwise, just set it to None or ignore it in the init). Usually you don't know beforehand whether there is a signiicant companion in the data, so you just ignore it in the first run and specifiy it in subsequent reductions for the same data based on the location of the companion in the detection map. Luckily, for the test data we know the location of 51 Eri b already. :)\n", + "\n", + "- You can run TRAP on multiple cores, specified by the \"use_multiprocessing\" and if True \"ncpus\" for the number of cores to be used. Running TRAP on multiple cores can significantly decrease the processing time. However, given how right now only a simple \"multiprocessing.pool\" implementation is used, it scales very poorly with memory use (i.e. every core has to have a copy of the whole data). If you run it on a laptop, I'd recommend playing around with small numbers first and monitor your memory usage before going all out. Since the data is cropped automatically to the \"search_region_outer_bound\" size (plus some extra space for regressor selection and such), memory usage goes down sharply with a smaller outer bound of the search area.\n", + "\n", + "- The \"result_folder\"-parameter specifies the path to the directory where you want to put the analysis results.\n", + "\n", + "- The next parameters specify the size of the PSF stamp to be used in the reduction. First, \"autosize_masks_in_lambda_over_d\" specifies whether you want to give the size in $\\lambda/D$. In this case the next two parameters count (2.1 corresponds roughly to the size of the PSF including the first Airy-ring). If not, you can give a fixed size in pixel using the next two parameters directly. As you can see there are two masks: the \"signal_mask\" and the \"reduction_mask\". The signal mask determines the size of the companion PSF that a companion affects with flux, this is important for removing pixels from the training data that could be contaminated by a planet at the point at which we currently search for a signal. The reduction mask determined the size of the PSF stamp used to determine which pixels to fit with a model given the assumed search position. The signal mask size should always be larger or equal to the reduction mask size. The reduction mask basically corresponds to $\\mathcal{P}_{\\mathcal{Y}}$ in Samland et al. 2020.\n", + "\n", + "- Next we have the parameters controlling what to include in the regressors: \"annulus_width\" is the width of the regressor annulus in pixel. If \"add_radial_regressors\" is True pixels radially inside and outside of reduction area will be added to pool of regressor pixels. \"include_opposite_regressors\" includes additional regressors corresponding to the reduction area, but mirrored at the origin (host star).\n", + "\n", + "- With the last four parameters above your control contrast curve creation and the empirical calibration of the uncertainties that is used in normalizing the SNR map. Switch on or off the automatic contrast curve creation at the end is mostly for people who work on a remote machine that has troubles plotting. Since making the contrast curve doesn't take any time at all and your computer doesn't have trouble plotting, just keep it on. The \"normalization_width\" is the width of the annulus used for normalizing the SNR map and \"companion_mask_size\" gives the radius of the mask (in pixel) used to mask out the companion in the normalization procedure and contrast curve statistics." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you want to learn more about the available options, although it can be a bit overwhelming, feel free to take a look at the docstrings!" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mInit signature:\u001b[0m\n", + "\u001b[0mInstrument\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpixel_scale\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtelescope_diameter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdetector_gain\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mreadnoise\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0minstrument_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'photometry'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mwavelengths\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mspectral_resolution\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mfilters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtransmission\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m \n", + "Important information on the instrument.\n", + "\n", + "Parameters\n", + "----------\n", + "name : str\n", + " Name of the instrument used.\n", + "pixel_scale : `~astropy.units.Quantity`\n", + " The pixel scale either in units of angle/pixel or pixel/angle.\n", + "telescope_diameter : `~astropy.units.Quantity`\n", + " The diameter of the telescopy in units of length.\n", + "detector_gain : float\n", + " The detector gain (electrons/ADU).\n", + "readnoise : float\n", + " The detector read noise (e rms/pix/readout).\n", + "instrument_type : str, optional\n", + " Can take values 'phot', 'ifu' or None. Only used for spectral\n", + " template matching in detection.\n", + " Default is 'photometry'.\n", + "wavelengths : `~astropy.units.Quantity`\n", + " The (central) wavelengths of the data as sampled by this instrument.\n", + " Effective wavelength for photometric observations.\n", + "spectral_resolution : float, optional\n", + " The spectral resolution of the instrument. Only needed if\n", + " 'instrument_type' == 'ifu'.\n", + " Default is None.\n", + "filters : array_like??, optional\n", + " The filter curves for each channel observed. species object?\n", + " Default is None.\n", + "transmission : array_like??, optional\n", + " The common-path instrument and atmospheric transmission profile.\n", + "\n", + "Attributes\n", + "----------\n", + "name\n", + "pixel_scale\n", + "telescope_diameter\n", + "detector_gain\n", + "readnoise\n", + "instrument_type\n", + "wavelengths\n", + "spectral_resolution\n", + "filters\n", + "transmission\n", + "\u001b[0;31mFile:\u001b[0m ~/science/python/projects/github/trap/src/trap/parameters.py\n", + "\u001b[0;31mType:\u001b[0m type\n", + "\u001b[0;31mSubclasses:\u001b[0m " + ] + } + ], + "source": [ + "Instrument?" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0;31mInit signature:\u001b[0m\n", + "\u001b[0mReduction_parameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msearch_region\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msearch_region_inner_bound\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msearch_region_outer_bound\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m55\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0moversampling\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdata_auto_crop\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdata_crop_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mright_handed\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0minclude_noise\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtemporal_model\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtemporal_plus_spatial_model\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msecond_stage_trap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mremove_model_from_spatial_training\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mremove_bad_residuals_for_spatial_model\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mspatial_model\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mlocal_temporal_model\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mlocal_spatial_model\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mprotection_angle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mspatial_components_fraction\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mspatial_components_fraction_after_trap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mhighpass_filter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mremove_known_companions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0myx_known_companion_position\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mknown_companion_contrast\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0muse_multiprocess\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mncpus\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mprefix\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mresult_folder\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'./'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0minject_fake\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtrue_position\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtrue_contrast\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mread_injection_files\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0minjection_sigma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mreduce_single_position\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mguess_position\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mplot_all_diagnostics\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mfit_planet\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mnumber_of_pca_regressors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0myx_anamorphism\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1.\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1.\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mpca_scaling\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'temp-median'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mmethod_of_regressor_selection\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mauxiliary_frame\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mannulus_width\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mannulus_offset\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0madd_radial_regressors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0minclude_opposite_regressors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mvariance_prior_scaling\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcompute_inverse_once\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mautosize_masks_in_lambda_over_d\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mreduction_mask_size_in_lambda_over_d\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2.1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msignal_mask_size_in_lambda_over_d\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2.1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mreduction_mask_psf_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m21\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msignal_mask_psf_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m21\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mthreshold_pixel_by_contribution\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mmake_reconstructed_lightcurve\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtarget_pix_mask_radius\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0muse_relative_position\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcompute_residual_correlation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0muse_residual_correlation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcontrast_curve\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcontrast_curve_sigma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5.0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mnormalization_width\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mcompanion_mask_radius\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m11\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mreturn_input_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mDocstring:\u001b[0m \n", + "Contains all reduction parameters describing the settings\n", + " for TRAP.\n", + "\n", + "Parameters\n", + "----------\n", + "search_region : array_like, optional\n", + " Binary mask of relative position to search for planets.\n", + "search_region_inner_bound : integer\n", + " Separation of inner-edge of reduction region (in pixel).\n", + "search_region_outer_bound : integer\n", + " Separation of outer-edge of reduction region (in pixel).\n", + "oversampling : scalar\n", + " Oversampling factor for detection map. Default is 1.0.\n", + "data_auto_crop : boolean\n", + " Automatically crop images to smallest size necessary for\n", + " the chosen reduction parameters.\n", + "data_crop_size : scalar or None\n", + " Manually chosen size for data cropping. Default is None.\n", + "right_handed : boolean\n", + " Determines the sky rotation direction. True for SPHERE,\n", + " False for most instruments. Best try both on a data set\n", + " with known companion to confirm for your instrument.\n", + "include_noise : boolean\n", + " Take into account variance of the input data when fitting\n", + " models. If True and no explicit variance is provided to\n", + " the reduction wrapper, the data is assumed to represent the\n", + " shot noise in the data and the read noise and gain from\n", + " the instrument object are used. Default is False.\n", + "temporal_model : boolean\n", + " Perform temporal model fit. Default is True.\n", + "temporal_plus_spatial_model : boolean\n", + " Perform spatial model fit on the residuals of the temporal\n", + " systematics subtracted frames.\n", + "second_stage_trap : boolean\n", + " Perform a second temporal model fit without the companion model\n", + " after subtracting the 2d companion PSF with best-fit contrast\n", + " from the first iteration. This can be used as an additional step\n", + " before the `temporal_plus_spatial_mode` reduction.\n", + " Default is False.\n", + "remove_model_from_spatial_training : boolean\n", + " Remove temporal best-fit contrast signal from training set used for\n", + " spatial model fit. Default is True.\n", + "remove_bad_residuals_for_spatial_model : boolean\n", + " Remove pixels with anomalous temporal residuals from spatial model fit.\n", + "spatial_model : boolean\n", + " Perform a spatial model fit. Default is False.\n", + "local_temporal_model : boolean\n", + " If True perform temporal model fit local in time (experimental).\n", + " Not recommended. Default is False.\n", + "local_spatial_model : boolean\n", + " If True perform spatial model fit very locally in space (experimental).\n", + " Not recommended. Default is False.\n", + "protection_angle : scalar\n", + " Protection angle in lambda over D used for spatial model.\n", + "spatial_components_fraction : scalar\n", + " Fraction of total available number of principal components to use\n", + " for spatial model. Must be between 0 and 1. Default is 0.3.\n", + "spatial_components_fraction_after_trap : scalar\n", + " Fraction of total available number of principal components to use\n", + " for spatial model after temporal systematics have been subtracted.\n", + " Must be between 0 and 1. Default is 0.1.\n", + "highpass_filter : scalar or None\n", + " Apply high-pass filter with a given filter fraction to data before\n", + " analysis (experimental). Not recommended: Default is None.\n", + "remove_known_companions : boolean\n", + " Remove known companion signals from data via negative injection.\n", + " Not used for normal TRAP reductions. Default is False.\n", + "yx_known_companion_position : None, tuple, or list of tuples\n", + " Position of known companions to mask out.\n", + " Default is None.\n", + "known_companion_contrast : None or scalar\n", + " Contrast associated with `yx_known_companion_position`.\n", + " Use for 'remove_known_companions'. Not to be confused with\n", + " `true_contrast`, which is associated with injected signals.\n", + " Default is None.\n", + "use_multiprocess : boolean\n", + " Use multiprocessing.\n", + "ncpus : integer\n", + " Number of cores available. Beware linear increase in memory usage.\n", + "prefix : string\n", + " Prefix added in front of output file names.\n", + "result_folder : string\n", + " Path where reduction outputs will be saved.\n", + "inject_fake : boolean\n", + " Inject a fake signal with `true_contrast` into the data\n", + " at `true_position`. If `read_injection_files` is True,\n", + " signals will be injected at every position with `injection_sigma`.\n", + " Default is False.\n", + "true_position : tuple\n", + " Position of injected signal.\n", + "true_contrast : scalar\n", + " Contrast of injected signal.\n", + "read_injection_files : boolean\n", + " Use existing detection map for to determine brightness of signals\n", + " to inject given a `injection_sigma`.\n", + " Default is False.\n", + "injection_sigma : scalar\n", + " Expected significance of injected signal based on detection map.\n", + "reduce_single_position : boolean\n", + " Applies TRAP to a single position described by `guess_position`.\n", + "guess_position : tuple\n", + " Individual position to reduce, if `reduce_single_position` is True.\n", + "fit_planet : boolean\n", + " Include planet signal as forward model in fit. Default is True.\n", + "number_of_pca_regressors : integer\n", + " Number of PCA regressors used. This information is added by the pipeline\n", + " based on the component fraction provided.\n", + "yx_anamorphism : None or tuple\n", + " Description of parameter `yx_anamorphism`.\n", + "pca_scaling : {None, 'temp-mean', 'spat-mean', 'temp-standard', 'spat-standard',\n", + " 'temp-median', 'spat-median', 'temp-quartile, 'spat-quartile'}\n", + " Chose the method of centering and scaling the data for the\n", + " PCA regressors. The temp(oral) and spat(ial) definition assume that\n", + " time is axis=0 and space is axis=1. Median and quartile are the\n", + " robust version of centering and scaling. Default is 'temp-median'.\n", + "method_of_regressor_selection : {'random', 'auxiliary', None}, optional\n", + " 'random' selects a random sample of regressors.\n", + " 'auxiliary' regressor selection based on `auxiliary_frame`.\n", + " Not implemented at the moment. Default: None\n", + "auxiliary_frame : array_like\n", + " Auxiliary frame on which to base regressor selection on.\n", + " Default is None.\n", + "annulus_width : scalar\n", + " Width of the regressor annulus (in pixel). Default is 5.\n", + "annulus_offset : scalar\n", + " Radially displace regressor annulus (by pixel). Default is 0.\n", + "add_radial_regressors : boolean\n", + " Add additional radial regressors around the reduction area.\n", + " Default is True.\n", + "include_opposite_regressors : boolean\n", + " Include reduction area mirrored around origin as regressors.\n", + " Default is True.\n", + "variance_prior_scaling : scalar, optional\n", + " Scaling factor for variance. Not in current implementation.\n", + " Default is 1.0.\n", + "autosize_masks_in_lambda_over_d : boolean\n", + " Adjust reduction area and signal protection area based on\n", + " `reduction_mask_size_in_lambda_over_d` and\n", + " `signal_mask_size_in_lambda_over_d`. Default is True.\n", + "reduction_mask_size_in_lambda_over_d : scalar\n", + " If `autosize_masks_in_lambda_over_d` is True, gives\n", + " size of PSF stamp used to create reduction area in resolution\n", + " elements. Will automatically adjust size based on instrument-object\n", + " and wavelength used. Has to be smaller than\n", + " `signal_mask_size_in_lambda_over_d`. Default is 1.1.\n", + "signal_mask_size_in_lambda_over_d : scalar\n", + " If `autosize_masks_in_lambda_over_d` is True, gives\n", + " size of PSF stamp used to create signal exclusion area in resolution\n", + " elements. Will automatically adjust size based on instrument-object\n", + " and wavelength used. Has to be larger than\n", + " `reduction_mask_size_in_lambda_over_d`. Default is 2.1.\n", + "reduction_mask_psf_size : scalar\n", + " Size of PSF stamp used to create reduction area in resolution\n", + " elements in pixel. Has to be smaller than `signal_mask_size`.\n", + " Default is 21.\n", + "signal_mask_psf_size : scalar\n", + " Size of PSF stamp used to create reduction area in resolution\n", + " elements in pixel. Has to be larger than `reduction_mask_size`.\n", + " Default is 21.\n", + "threshold_pixel_by_contribution : scalar\n", + " Include all pixels in reduction for which the overall flux fraction\n", + " of the total integrated flux that a pixel observes is higher than the\n", + " threshold, e.g. for 0.1 only pixels that contribute more than 10% of\n", + " total signal are considered. Default is 0.\n", + "target_pix_mask_radius : scalar, optional\n", + " Exclude pixels within this radius from regressor selection.\n", + " Not used in current forward model based implementation.\n", + " Default is None.\n", + "use_relative_position : boolean\n", + " Use relative position for coordinates.\n", + " True may break functionality in current implementation.\n", + " Default is False.\n", + "compute_inverse_once : boolean\n", + " Do not recompute PCAs for each pixel.\n", + " False may break functionality in current implementation.\n", + " Default is True.\n", + "make_reconstructed_lightcurve : boolean\n", + " Reconstruct model fit lightcurve instead of just determining\n", + " parameters. Necessary for normal functionality of the pipeline.\n", + " Default is True.\n", + "compute_residual_correlation : boolean\n", + " Compute correlations between residuals after model fit (experimental).\n", + " Default is False.\n", + "use_residual_correlation : boolean\n", + " Use correlation between residuals after model fit instead of simple,\n", + " uncorrelated weighted average. Produces additional output files similar\n", + " to the detection_image output.\n", + " Default is False.\n", + "contrast_curve : boolean\n", + " Automatically generate contrast curve after reduction.\n", + " Default is True.\n", + "constrast_curve_sigma : scalar\n", + " Defines the sigma of the contrast curve.\n", + " Default is 5.\n", + "normalization_width : integer\n", + " Width (in pixel) of radial bin used to normalize the detection map.\n", + " Default is 3.\n", + "companion_mask_radius : integer\n", + " Radius of mask around `yx_known_companion_position` of pixels to be\n", + " ignored for detection map normalization and contrast curve.\n", + " Default is 11.\n", + "return_input_data : boolean\n", + " Include input data for temporal model in `~trap.regression.Result`\n", + " object. Default is False.\n", + "plot_all_diagnostics : boolean\n", + " If `reduce_single_position` is True, this will produce diagnostic\n", + " plots in a folder in the current working directory called\n", + " `diagnostic_plots`. This is very helpful when testing the code\n", + " or get more information on a specific location in parameter space.\n", + "verbose : boolean\n", + " Produce additional output in console. Default is False.\n", + "\n", + "Attributes\n", + "----------\n", + "search_region\n", + "search_region_inner_bound\n", + "search_region_outer_bound\n", + "oversampling\n", + "include_noise\n", + "data_auto_crop\n", + "data_crop_size\n", + "right_handed\n", + "remove_known_companions\n", + "yx_known_companion_position\n", + "known_companion_contrast\n", + "use_multiprocess\n", + "ncpus\n", + "prefix\n", + "result_folder\n", + "reduce_single_position\n", + "true_position\n", + "true_contrast\n", + "read_injection_files\n", + "inject_fake\n", + "injection_sigma\n", + "guess_position\n", + "fit_planet\n", + "number_of_pca_regressors\n", + "yx_anamorphism\n", + "variance_prior_scaling\n", + "pca_scaling\n", + "method_of_regressor_selection\n", + "auxiliary_frame\n", + "annulus_width\n", + "annulus_offset\n", + "reduction_mask_psf_size\n", + "signal_mask_psf_size\n", + "autosize_masks_in_lambda_over_d\n", + "reduction_mask_size_in_lambda_over_d\n", + "signal_mask_size_in_lambda_over_d\n", + "add_radial_regressors\n", + "radial_separation_from_source\n", + "include_opposite_regressors\n", + "threshold_pixel_by_contribution\n", + "target_pix_mask_radius\n", + "use_relative_position\n", + "compute_inverse_once\n", + "temporal_model\n", + "temporal_plus_spatial_model\n", + "second_stage_trap\n", + "spatial_model\n", + "local_temporal_model\n", + "local_spatial_model\n", + "protection_angle\n", + "spatial_components_fraction\n", + "spatial_components_fraction_after_trap\n", + "remove_model_from_spatial_training\n", + "remove_bad_residuals_for_spatial_model\n", + "highpass_filter\n", + "make_reconstructed_lightcurve\n", + "compute_residual_correlation\n", + "use_residual_correlation\n", + "contrast_curve\n", + "constrast_curve_sigma\n", + "normalization_width\n", + "companion_mask_radius\n", + "return_input_data\n", + "plot_all_diagnostics\n", + "verbose\n", + "\u001b[0;31mFile:\u001b[0m ~/science/python/projects/github/trap/src/trap/parameters.py\n", + "\u001b[0;31mType:\u001b[0m type\n", + "\u001b[0;31mSubclasses:\u001b[0m " + ] + } + ], + "source": [ + "Reduction_parameters?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reading in the data and some additional information for the reduction\n", + "\n", + "Nooooow, we actually need some data! For this example we will use the SPHERE 51 Eri b data packaged in TRAP. We need:\n", + "\n", + "- The **data cube** containing the main science observation (usually coronagraphic, but of course it also works on non-coronagraphic sequences too). In the case of running the reduction pre-aligned data (such as in this example), the center is assumed to be centered on the pixel with the index (image_size_y // 2, image_size_x // 2), where \"//\" is the floor-operator in Python.\n", + "- An **unsaturated model of the PSF** used as forward model for the companion. It should be scaled to the same exposure time and filter (usually there is an neutral density filter) as the science observation.\n", + "- A list containing the **parallactic angles for each frame**\n", + "- An astropy quantity array containing the **wavelengths of each channel**.\n", + "\n", + "Optionally:\n", + "- A cube of the same dimension as the science data, containing the **inverse variance for each data point**. If you have this information it is recommended to include it in the fit, as it automatically puts less weight on bad data. If \"include_noise\" is True, the pipeline will first check if a variance cube is provide, otherwise it will assume the data only contains photon noise and the read noise specified in the Instrument-object. This is of course not entirely true if for example your pre-reduction of the data already removed a significant sky background or rescaled the amplitude of the data, so beware of these effects.\n", + "- A list containing **indices of bad frames**. TRAP is very robust against anomalous frames compared to traditional spatial models, so unless some data seems completely un-usable I wouldn't recommend removing data aggresively or even at all)\n", + "- An array of **companion flux amplitude modulation factors** (centered around 1). The first axis should be wavelength, the second time. You can account for flux variation in the companion model by, for example, taking into account the frame-to-frame change in satellite spot brightness. The companion signal will be multiplied by this factor in the forward model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If the paths of the demo data is not recognized properly on your installation, you can simply change the folder by hand to the directory of the package (or download it separately somewhere else)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [], + "source": [ + "data_full = fits.getdata(\n", + " './test_data/science_cube.fits')\n", + "flux_psf_full = fits.getdata(\n", + " './test_data/psf_model.fits')\n", + "pa = fits.getdata(\n", + " './test_data/parallactic_angles.fits')\n", + "\n", + "inverse_variance_full = None\n", + "bad_frames = None\n", + "amplitude_modulation_full = None" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data includes a wavelength dimension (axis=0), but we included only the K1 wavelength in the test data.\n", + "Let's have a quick peak at the first frame of the (only wavelength). The \"plot_scale\" routine automatically plots the zscale image with colorbar." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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xjapWIJse4VALGNT283O/63Nx0GkWPMvLf6lnaoimizyNpteEMV5ierpF6eIjiH/0oo55V/tZyxfnLL2JYjzHqx8PLlPGkss91P0wdcX98PbpMZsvDjFcp0Wn3saj/ilxSn/fMhVH7E6Tp19Qca576xnWHRwRwXiquQ5aRb/y5nbFr+0+fPkOOtzz88EcQ3nxRvx84auh83Ph9S+QMUi5V5rRp/q+si6hlOxXOax4ZddHcMor4ns+z7nDwarHybK2Rc6tuJ8iJff7Ben0dYQ6s3RzG3WNx7fNLzunJGJoxjxVhaeB7p3/ybCtHhxeuCBBwAAl156KT75yU9ijz32wL/+67/i+OOPxx//+EfMmTOns+5rXvMafO9738PIyAhe+tKX4t/+7d/MdletWoW5c+eKz8rlMubMmWOmhg4MDAAA7rv/B1u7W1tk2WPfnvxGM/7wXh7/LD9pYhLsN5a3bxrfBtZ4WsYygDsaP01+GMU2Y9nqbXBeFHcM37Dt+xj98TbvA9h07vn3mf2OPmHEud9GLG9OUh9b2P/OedmGYTWTti855J4TPgZbea8Wvo63op9l6/574hsXZPPvlq4jjjApvwS2Ix+nKX1xuuiii/Cxj30sd527774b0aa38/e+9704/fTTAQBf/epXscsuu+Db3/42/u7v/q6z/qc+9Slccskl+OMf/4iLL74YF154Ib7whS9M2pgXLVqE5cuXY8OGDWamyfz58zF//vxJ69NxHMeZvqxatcr8YzyOYwwMDGDRokVP76CcCTOlL07/8A//gDe+8Y256+y1115YuXIlABnTVKvVsNdee+GRRx4R629+aTnggAMwZ84c/NVf/RXe//73Y8GCBam258+fj8cee0x81mq1sGbNGvPFJwxDPOc5zymye47jOI6DwcFB7LffflM9jAnhUl2aKX1x2mmnnbDTTjttcb3DDz8ctVoN99xzD4499lgAQLPZxEMPPYTdd9/d3G7zTFXd8D46+uijsXbtWixfvhyHH344AOCmm25CFEVYvHjxeHfHcRzHcZztnGkR4zQ4OIi3ve1tuOSSS7Drrrti991372TLvfKVrwQA/PCHP8Tq1atx5JFHor+/H7///e/xrne9C8cccwz22GMPAMDtt9+ON7zhDbjxxhux884748ADD8TJJ5+Mt7zlLbjqqqvQbDZx7rnn4owzzsjNqHMcx3GcZwKtuD4p8Ul5CUjTjWnx4gQAn/jEJ1Aul/H6178eIyMjWLx4MW666SbMnj0bANDb24svf/nLuOCCC1Cv17HrrrviFa94BS666KJOG8PDw7jnnnvQpIK83/jGN3DuuefixBNPRBiGOP300/HZz372ad8/x3Ecx+kWqtUq5s+fj1tW/XDS2pw/fz6q1eqWV+x2YifF9ddfHx911FFxT09PPGvWrPjUU0/tfPfEE0/EJ510UrxgwYK4Wq3Gu+yyS3zOOefE69aty23zySefjF/72tfGAwMD8cyZM+M3v/nN8YYNG7bxnmwfvPSlL4133XXXuFarxfPnz49f97rXxY8++mjn+5GRkfiss86KDznkkLhUKonzlcfuu+++uQhT599HPvKRbbQX2ydXXHFFvPvuu8e1Wi0+6qij4ttuuy13/W9961vx/vvvH9dqtfiQQw6Jf/CDHzxNI93++MIXvhAfeuih8cDAQDwwMBA/97nPjX/4wx92vv/iF78YH3fccfHAwEAMIH7qqae22OYll1ySuif233//bbgX2x9//vOf4zPPPDOeM2dO3NPTEx9yyCHxsmXLOt9fcskl8f777x/39fXFs2bNik888cT41ltv3WK7473XJoORkZF43bp1k/ZvZGRkm4/56cCdtxTPJIfy6cIJJ5yAb33rW7jnnntw7bXX4v7778ff/M3fdL5vt9vo7e3FO97xDixZsmRcbV922WVYuXJl599555032cPfbvmv//ovXHjhhbjkkktw55134rDDDsNJJ52USrjYzK9+9Su85jWvwdlnn41f//rXOO2003Daaafhd7/73dM88u2DXXbZBR/96EexfPly3HHHHXjBC16AU089Fb///e8BjM2wn3zyyXjPe94zrnYPPvhgcU/ccsst22L42yVPPfUUjjnmGFQqFfzoRz/CXXfdhX/913/tKCMAsN9+++GKK67Ab3/7W9xyyy3YY4898MIXvhCPP/642e5477XJoqenB4ODg5P2r6enZ5uO92ljqt/cuolmsxnvvPPO8b/927+Na7vPfOYz8S677GJ+f9ddd8UAxF8dP/rRj+IgCMTMiVOM733v/2/vToOauto4gP9jMBESFBTCktEgspi6NWpFtB3AgpC2duq06DAdtNi6VQestCVObbWjxmprqeLuuOBIxb1WtIqiFAVUkFA3VIig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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_scale(data_full[0, 0], relative_to_center=True, figsize=(6, 6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And that's it! For a basic reduction with an already pre-aligned/centered cube this is all that is needed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the reduction\n", + "\n", + "The heavy lifting is already done, we now just have two more high-level parameter we can set." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "wavelength_indices = [0]\n", + "temporal_components_fraction = [0.2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you provided a cube with the first axis being wavelength (for example when using an IFS or dual-band imager), you can explicitly specify which wavelength indices you want to reduce. Chosing None or not setting it explicitly a reduction of all wavelengths will be performed.\n", + "\n", + "The \"temporal_components_fraction\"-parameter described how many principal components (compared to be maximum available number, i.e. the number of frames in the sequences) you want to use. If more than one entry is provided in the list it will loop over the different options and provide output for all of them." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Starting the reduction\n", + "\n", + "Running the reduction on one core in the 1 - 45 pixel separation range can take about an hour (with the above parameters). Best time to make coffee or go for a long walk! Or run it one a bigger machine. ;)\n", + "\n", + "If you don't want to wait for an hour you can skip further down this notebook, where I show a small targeted reduction that may still be useful in some cases." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "run_reduction = True" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2024-03-28 14:19:18,707 I 3938 3938] (gcs_server) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:18,708 I 3938 3938] (gcs_server) event.cc:234: Set ray event level to warning\n", + "[2024-03-28 14:19:18,708 I 3938 3938] (gcs_server) event.cc:342: Ray Event initialized for GCS\n", + "[2024-03-28 14:19:18,708 I 3938 3938] (gcs_server) gcs_server.cc:74: GCS storage type is StorageType::IN_MEMORY\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:42: Loading job table data.\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:54: Loading node table data.\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:80: Loading actor table data.\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:93: Loading actor task spec table data.\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:66: Loading placement group table data.\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:46: Finished loading job table data, size = 0\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:58: Finished loading node table data, size = 0\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:84: Finished loading actor table data, size = 0\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:97: Finished loading actor task spec table data, size = 0\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_init_data.cc:71: Finished loading placement group table data, size = 0\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_server.cc:162: No existing server cluster ID found. Generating new ID: 1b0161495d3a009875c208091d9048466e785292cd1a7b1e88edcb8a\n", + "[2024-03-28 14:19:18,709 I 3938 3938] (gcs_server) gcs_server.cc:648: Autoscaler V2 enabled: 0\n", + "[2024-03-28 14:19:18,710 I 3938 3938] (gcs_server) grpc_server.cc:129: GcsServer server started, listening on port 60011.\n", + "[2024-03-28 14:19:18,730 I 3938 3938] (gcs_server) gcs_server.cc:250: GcsNodeManager: \n", + "- RegisterNode request count: 0\n", + "- DrainNode request count: 0\n", + "- GetAllNodeInfo request count: 0\n", + "- GetInternalConfig request count: 0\n", + "\n", + "GcsActorManager: \n", + "- RegisterActor request count: 0\n", + "- CreateActor request count: 0\n", + "- GetActorInfo request count: 0\n", + "- GetNamedActorInfo request count: 0\n", + "- GetAllActorInfo request count: 0\n", + "- KillActor request count: 0\n", + "- ListNamedActors request count: 0\n", + "- Registered actors count: 0\n", + "- Destroyed actors count: 0\n", + "- Named actors count: 0\n", + "- Unresolved actors count: 0\n", + "- Pending actors count: 0\n", + "- Created actors count: 0\n", + "- owners_: 0\n", + "- actor_to_register_callbacks_: 0\n", + "- actor_to_create_callbacks_: 0\n", + "- sorted_destroyed_actor_list_: 0\n", + "\n", + "GcsResourceManager: \n", + "- GetAllAvailableResources request count0\n", + "- GetAllResourceUsage request count: 0\n", + "\n", + "GcsPlacementGroupManager: \n", + "- CreatePlacementGroup request count: 0\n", + "- RemovePlacementGroup request count: 0\n", + "- GetPlacementGroup request count: 0\n", + "- GetAllPlacementGroup request count: 0\n", + "- WaitPlacementGroupUntilReady request count: 0\n", + "- GetNamedPlacementGroup request count: 0\n", + "- Scheduling pending placement group count: 0\n", + "- Registered placement groups count: 0\n", + "- Named placement group count: 0\n", + "- Pending placement groups count: 0\n", + "- Infeasible placement groups count: 0\n", + "\n", + "GcsPublisher {}\n", + "\n", + "[runtime env manager] ID to URIs table:\n", + "[runtime env manager] URIs reference table:\n", + "\n", + "GcsTaskManager: \n", + "-Total num task events reported: 0\n", + "-Total num status task events dropped: 0\n", + "-Total num profile events dropped: 0\n", + "-Current num of task events stored: 0\n", + "-Total num of actor creation tasks: 0\n", + "-Total num of actor tasks: 0\n", + "-Total num of normal tasks: 0\n", + "-Total num of driver tasks: 0\n", + "\n", + "\n", + "[2024-03-28 14:19:18,730 I 3938 3938] (gcs_server) gcs_server.cc:844: Event stats:\n", + "\n", + "\n", + "Global stats: 27 total (14 active)\n", + "Queueing time: mean = 2.389 ms, max = 21.474 ms, min = 1.753 us, total = 64.494 ms\n", + "Execution time: mean = 798.008 us, total = 21.546 ms\n", + "Event stats:\n", + "\tInternalKVGcsService.grpc_client.InternalKVPut - 6 total (6 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tGcsInMemoryStore.Put - 5 total (2 active), Execution time: mean = 4.297 ms, total = 21.485 ms, Queueing time: mean = 4.250 ms, max = 21.247 ms, min = 1.753 us, total = 21.252 ms\n", + "\tGcsInMemoryStore.GetAll - 5 total (0 active), Execution time: mean = 6.145 us, total = 30.727 us, Queueing time: mean = 27.341 us, max = 27.788 us, min = 26.058 us, total = 136.703 us\n", + "\tPeriodicalRunner.RunFnPeriodically - 4 total (2 active, 1 running), Execution time: mean = 1.652 us, total = 6.609 us, Queueing time: mean = 10.725 ms, max = 21.474 ms, min = 21.427 ms, total = 42.901 ms\n", + "\tInternalKVGcsService.grpc_server.InternalKVPut.HandleRequestImpl - 2 total (0 active), Execution time: mean = 7.466 us, total = 14.932 us, Queueing time: mean = 100.365 us, max = 102.687 us, min = 98.044 us, total = 200.731 us\n", + "\tInternalKVGcsService.grpc_server.InternalKVPut - 2 total (2 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tClusterResourceManager.ResetRemoteNodeView - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tRayletLoadPulled - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tGcsInMemoryStore.Get - 1 total (0 active), Execution time: mean = 8.884 us, total = 8.884 us, Queueing time: mean = 2.614 us, max = 2.614 us, min = 2.614 us, total = 2.614 us\n", + "\n", + "\n", + "[2024-03-28 14:19:18,730 I 3938 3938] (gcs_server) gcs_server.cc:845: GcsTaskManager Event stats:\n", + "\n", + "\n", + "Global stats: 2 total (1 active)\n", + "Queueing time: mean = 42.767 us, max = 85.535 us, min = 85.535 us, total = 85.535 us\n", + "Execution time: mean = 15.570 us, total = 31.141 us\n", + "Event stats:\n", + "\tGcsTaskManager.GcJobSummary - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tPeriodicalRunner.RunFnPeriodically - 1 total (0 active), Execution time: mean = 31.141 us, total = 31.141 us, Queueing time: mean = 85.535 us, max = 85.535 us, min = 85.535 us, total = 85.535 us\n", + "\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-28 14:19:20,171\tINFO (monitor) monitor.py:688 -- Starting monitor using ray installation: /home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/ray/__init__.py\n", + "2024-03-28 14:19:20,171\tINFO (monitor) monitor.py:689 -- Ray version: 2.10.0\n", + "2024-03-28 14:19:20,171\tINFO (monitor) monitor.py:690 -- Ray commit: 09abba26b5bf2707639bb637c208d062a47b46f6\n", + "2024-03-28 14:19:20,171\tINFO (monitor) monitor.py:691 -- Monitor started with command: ['/home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/ray/autoscaler/_private/monitor.py', '--logs-dir=/tmp/ray/session_2024-03-28_14-19-18_670785_2037/logs', '--logging-rotate-bytes=536870912', '--logging-rotate-backup-count=5', '--gcs-address=192.168.194.218:60011', '--logging-filename=', '--logging-format=%(asctime)s\\t%(levelname)s (monitor) %(filename)s:%(lineno)s -- %(message)s', '--monitor-ip=192.168.194.218']\n", + "2024-03-28 14:19:20,173\tINFO (monitor) monitor.py:159 -- session_name: session_2024-03-28_14-19-18_670785_2037\n", + "2024-03-28 14:19:20,174\tINFO (monitor) monitor.py:191 -- Starting autoscaler metrics server on port 44217\n", + "2024-03-28 14:19:20,175\tINFO (monitor) monitor.py:216 -- Monitor: Started\n", + "2024-03-28 14:19:20,181\tINFO (monitor) autoscaler.py:280 -- disable_node_updaters:False\n", + "2024-03-28 14:19:20,182\tINFO (monitor) autoscaler.py:288 -- disable_launch_config_check:True\n", + "2024-03-28 14:19:20,182\tINFO (monitor) autoscaler.py:300 -- foreground_node_launch:False\n", + "2024-03-28 14:19:20,182\tINFO (monitor) autoscaler.py:310 -- worker_liveness_check:True\n", + "2024-03-28 14:19:20,182\tINFO (monitor) autoscaler.py:318 -- worker_rpc_drain:True\n", + "2024-03-28 14:19:20,182\tINFO (monitor) autoscaler.py:368 -- StandardAutoscaler: {'cluster_name': 'default', 'max_workers': 0, 'upscaling_speed': 1.0, 'docker': {}, 'idle_timeout_minutes': 0, 'provider': {'type': 'readonly', 'use_node_id_as_ip': True, 'disable_launch_config_check': True}, 'auth': {}, 'available_node_types': {'ray.head.default': {'resources': {}, 'node_config': {}, 'max_workers': 0}}, 'head_node_type': 'ray.head.default', 'file_mounts': {}, 'cluster_synced_files': [], 'file_mounts_sync_continuously': False, 'rsync_exclude': [], 'rsync_filter': [], 'initialization_commands': [], 'setup_commands': [], 'head_setup_commands': [], 'worker_setup_commands': [], 'head_start_ray_commands': [], 'worker_start_ray_commands': []}\n", + "2024-03-28 14:19:20,183\tINFO (monitor) monitor.py:383 -- Autoscaler has not yet received load metrics. Waiting.\n", + "2024-03-28 14:19:20,254\tINFO (dashboard) head.py:150 -- Dashboard head grpc address: 0.0.0.0:43493\n", + "2024-03-28 14:19:20,259\tINFO (dashboard) head.py:254 -- Starting dashboard metrics server on port 44227\n", + "2024-03-28 14:19:20,261\tINFO (dashboard) utils.py:112 -- Get all modules by type: DashboardHeadModule\n", + "2024-03-28 14:19:20,575\tINFO (dashboard) utils.py:145 -- Available modules: [, , , , , , , , .ServeRestApiImpl'>, , , ]\n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:223 -- Modules to load: {'EventHead', 'StateHead', 'DataHead', 'MetricsHead', 'UsageStatsHead', 'HealthzHead', 'ReportHead', 'NodeHead', 'ServeRestApiImpl', 'ActorHead', 'JobHead', 'APIHead'}\n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: .ServeRestApiImpl'>\n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,575\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,576\tINFO (dashboard) head.py:226 -- Loading DashboardHeadModule: \n", + "2024-03-28 14:19:20,576\tINFO (dashboard) head.py:239 -- Loaded 12 modules. [, , , , , , , , .ServeRestApiImpl object at 0x7f25a27cad90>, , , ]\n", + "2024-03-28 14:19:20,576\tINFO (dashboard) head.py:329 -- Initialize the http server.\n", + "2024-03-28 14:19:20,576\tINFO (dashboard) http_server_head.py:81 -- Setup static dir for dashboard: /home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/ray/dashboard/client/build\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:249 -- Dashboard head http address: 127.0.0.1:8265\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> .ServeRestApiImpl.get_version at 0x7f25a16f4a40>\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> .ServeRestApiImpl.get_serve_instance_details at 0x7f25a16f4ae0>\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> .ServeRestApiImpl.delete_serve_applications at 0x7f25a16f4d60>\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> .ServeRestApiImpl.put_all_applications at 0x7f25a16f4f40>\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f6b60>\n", + "2024-03-28 14:19:20,579\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f6d40>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f6f20>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f7100>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f72e0>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f74c0>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f76a0>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f7880>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f7a60>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f7c40>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a16f7e20>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a17040e0>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a17042c0>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a17044a0>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> .async_wrapper at 0x7f25a1704680>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- -> \n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:255 -- PosixPath('/home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/ray/dashboard/client/build/static')> -> PosixPath('/home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/ray/dashboard/client/build/static')>>\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) http_server_head.py:256 -- Registered 53 routes.\n", + "2024-03-28 14:19:20,580\tINFO (dashboard) head.py:332 -- http server initialized at 127.0.0.1:8265\n", + "2024-03-28 14:19:20,598\tINFO (dashboard) event_utils.py:132 -- Monitor events logs modified after 1711630160.3509367 on /tmp/ray/session_2024-03-28_14-19-18_670785_2037/logs/events, the source types are all.\n", + "2024-03-28 14:19:20,599\tINFO (dashboard) usage_stats_head.py:191 -- Usage reporting is disabled.\n", + "2024-03-28 14:19:20,600\tINFO (dashboard) actor_head.py:101 -- Getting all actor info from GCS.\n", + "2024-03-28 14:19:20,603\tINFO (dashboard) actor_head.py:123 -- Received 0 actor info from GCS.\n", + "2024-03-28 14:19:20,725\tINFO worker.py:1743 -- Started a local Ray instance. View the dashboard at \u001b[1m\u001b[32mhttp://127.0.0.1:8265 \u001b[39m\u001b[22m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2024-03-28 14:19:20,678 I 4038 4038] (raylet) main.cc:176: Setting cluster ID to: 1b0161495d3a009875c208091d9048466e785292cd1a7b1e88edcb8a\n", + "[2024-03-28 14:19:20,681 I 4038 4038] (raylet) main.cc:239: Raylet is not set to kill unknown children.\n", + "[2024-03-28 14:19:20,684 I 4038 4038] (raylet) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:20,685 I 4038 4038] (raylet) store_runner.cc:32: Allowing the Plasma store to use up to 2.0253GB of memory.\n", + "[2024-03-28 14:19:20,685 I 4038 4038] (raylet) store_runner.cc:48: Starting object store with directory /dev/shm, fallback /tmp/ray, and huge page support disabled\n", + "[2024-03-28 14:19:20,685 I 4038 4059] (raylet) dlmalloc.cc:154: create_and_mmap_buffer(2025324552, /dev/shm/plasmaXXXXXX)\n", + "[2024-03-28 14:19:20,685 I 4038 4059] (raylet) store.cc:564: ========== Plasma store: =================\n", + "Current usage: 0 / 2.0253 GB\n", + "- num bytes created total: 0\n", + "0 pending objects of total size 0MB\n", + "- objects spillable: 0\n", + "- bytes spillable: 0\n", + "- objects unsealed: 0\n", + "- bytes unsealed: 0\n", + "- objects in use: 0\n", + "- bytes in use: 0\n", + "- objects evictable: 0\n", + "- bytes evictable: 0\n", + "\n", + "- objects created by worker: 0\n", + "- bytes created by worker: 0\n", + "- objects restored: 0\n", + "- bytes restored: 0\n", + "- objects received: 0\n", + "- bytes received: 0\n", + "- objects errored: 0\n", + "- bytes errored: 0\n", + "\n", + "[2024-03-28 14:19:20,686 I 4038 4038] (raylet) grpc_server.cc:129: ObjectManager server started, listening on port 36831.\n", + "[2024-03-28 14:19:20,688 I 4038 4038] (raylet) worker_killing_policy.cc:101: Running GroupByOwner policy.\n", + "[2024-03-28 14:19:20,688 I 4038 4038] (raylet) memory_monitor.cc:47: MemoryMonitor initialized with usage threshold at 15595676672 bytes (0.95 system memory), total system memory bytes: 16416501760\n", + "[2024-03-28 14:19:20,688 I 4038 4038] (raylet) node_manager.cc:282: Initializing NodeManager with ID d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[2024-03-28 14:19:20,688 I 4038 4038] (raylet) grpc_server.cc:129: NodeManager server started, listening on port 39599.\n", + "[2024-03-28 14:19:20,695 I 4038 4075] (raylet) agent_manager.cc:78: Monitor agent process with name dashboard_agent/424238335\n", + "[2024-03-28 14:19:20,696 I 4038 4077] (raylet) agent_manager.cc:78: Monitor agent process with name runtime_env_agent\n", + "[2024-03-28 14:19:20,697 I 4038 4038] (raylet) event.cc:234: Set ray event level to warning\n", + "[2024-03-28 14:19:20,697 I 4038 4038] (raylet) event.cc:342: Ray Event initialized for RAYLET\n", + "[2024-03-28 14:19:20,697 I 3938 3938] (gcs_server) gcs_node_manager.cc:55: Registering node info, node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, address = 192.168.194.218, node name = 192.168.194.218\n", + "[2024-03-28 14:19:20,697 I 3938 3938] (gcs_server) gcs_node_manager.cc:61: Finished registering node info, node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, address = 192.168.194.218, node name = 192.168.194.218\n", + "[2024-03-28 14:19:20,697 I 3938 3938] (gcs_server) gcs_placement_group_manager.cc:797: A new node: d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e registered, will try to reschedule all the infeasible placement groups.\n", + "[2024-03-28 14:19:20,698 I 4038 4038] (raylet) raylet.cc:128: Raylet of id, d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e started. Raylet consists of node_manager and object_manager. node_manager address: 192.168.194.218:39599 object_manager address: 192.168.194.218:36831 hostname: lnx-n-0050\n", + "[2024-03-28 14:19:20,701 I 4038 4038] (raylet) node_manager.cc:502: [state-dump] NodeManager:\n", + "[state-dump] Node ID: d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[state-dump] Node name: 192.168.194.218\n", + "[state-dump] InitialConfigResources: {node:192.168.194.218: 10000, CPU: 40000, object_store_memory: 20253020160000, node:__internal_head__: 10000, memory: 40506040320000}\n", + "[state-dump] ClusterTaskManager:\n", + "[state-dump] ========== Node: d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e =================\n", + "[state-dump] Infeasible queue length: 0\n", + "[state-dump] Schedule queue length: 0\n", + "[state-dump] Dispatch queue length: 0\n", + "[state-dump] num_waiting_for_resource: 0\n", + "[state-dump] num_waiting_for_plasma_memory: 0\n", + "[state-dump] num_waiting_for_remote_node_resources: 0\n", + "[state-dump] num_worker_not_started_by_job_config_not_exist: 0\n", + "[state-dump] num_worker_not_started_by_registration_timeout: 0\n", + "[state-dump] num_tasks_waiting_for_workers: 0\n", + "[state-dump] num_cancelled_tasks: 0\n", + "[state-dump] cluster_resource_scheduler state: \n", + "[state-dump] Local id: 3879684863033855445 Local resources: {\"total\":{memory: [40506040320000], node:__internal_head__: [10000], node:192.168.194.218: [10000], CPU: [40000], object_store_memory: [20253020160000]}}, \"available\": {memory: [40506040320000], node:__internal_head__: [10000], node:192.168.194.218: [10000], CPU: [40000], object_store_memory: [20253020160000]}}, \"labels\":{\"ray.io/node_id\":\"d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\",} is_draining: 0 is_idle: 1 Cluster resources: node id: 3879684863033855445{\"total\":{node:__internal_head__: 10000, object_store_memory: 20253020160000, CPU: 40000, memory: 40506040320000, node:192.168.194.218: 10000}}, \"available\": {node:__internal_head__: 10000, object_store_memory: 20253020160000, CPU: 40000, memory: 40506040320000, node:192.168.194.218: 10000}}, \"labels\":{\"ray.io/node_id\":\"d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\",}, \"is_draining\": 0, \"draining_deadline_timestamp_ms\": -1} { \"placment group locations\": [], \"node to bundles\": []}\n", + "[state-dump] Waiting tasks size: 0\n", + "[state-dump] Number of executing tasks: 0\n", + "[state-dump] Number of pinned task arguments: 0\n", + "[state-dump] Number of total spilled tasks: 0\n", + "[state-dump] Number of spilled waiting tasks: 0\n", + "[state-dump] Number of spilled unschedulable tasks: 0\n", + "[state-dump] Resource usage {\n", + "[state-dump] }\n", + "[state-dump] Running tasks by scheduling class:\n", + "[state-dump] ==================================================\n", + "[state-dump] \n", + "[state-dump] ClusterResources:\n", + "[state-dump] LocalObjectManager:\n", + "[state-dump] - num pinned objects: 0\n", + "[state-dump] - pinned objects size: 0\n", + "[state-dump] - num objects pending restore: 0\n", + "[state-dump] - num objects pending spill: 0\n", + "[state-dump] - num bytes pending spill: 0\n", + "[state-dump] - num bytes currently spilled: 0\n", + "[state-dump] - cumulative spill requests: 0\n", + "[state-dump] - cumulative restore requests: 0\n", + "[state-dump] - spilled objects pending delete: 0\n", + "[state-dump] \n", + "[state-dump] ObjectManager:\n", + "[state-dump] - num local objects: 0\n", + "[state-dump] - num unfulfilled push requests: 0\n", + "[state-dump] - num object pull requests: 0\n", + "[state-dump] - num chunks received total: 0\n", + "[state-dump] - num chunks received failed (all): 0\n", + "[state-dump] - num chunks received failed / cancelled: 0\n", + "[state-dump] - num chunks received failed / plasma error: 0\n", + "[state-dump] Event stats:\n", + "[state-dump] Global stats: 0 total (0 active)\n", + "[state-dump] Queueing time: mean = -nan s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] Execution time: mean = -nan s, total = 0.000 s\n", + "[state-dump] Event stats:\n", + "[state-dump] PushManager:\n", + "[state-dump] - num pushes in flight: 0\n", + "[state-dump] - num chunks in flight: 0\n", + "[state-dump] - num chunks remaining: 0\n", + "[state-dump] - max chunks allowed: 409\n", + "[state-dump] OwnershipBasedObjectDirectory:\n", + "[state-dump] - num listeners: 0\n", + "[state-dump] - cumulative location updates: 0\n", + "[state-dump] - num location updates per second: 0.000\n", + "[state-dump] - num location lookups per second: 0.000\n", + "[state-dump] - num locations added per second: 0.000\n", + "[state-dump] - num locations removed per second: 0.000\n", + "[state-dump] BufferPool:\n", + "[state-dump] - create buffer state map size: 0\n", + "[state-dump] PullManager:\n", + "[state-dump] - num bytes available for pulled objects: 2025302016\n", + "[state-dump] - num bytes being pulled (all): 0\n", + "[state-dump] - num bytes being pulled / pinned: 0\n", + "[state-dump] - get request bundles: BundlePullRequestQueue{0 total, 0 active, 0 inactive, 0 unpullable}\n", + "[state-dump] - wait request bundles: BundlePullRequestQueue{0 total, 0 active, 0 inactive, 0 unpullable}\n", + "[state-dump] - task request bundles: BundlePullRequestQueue{0 total, 0 active, 0 inactive, 0 unpullable}\n", + "[state-dump] - first get request bundle: N/A\n", + "[state-dump] - first wait request bundle: N/A\n", + "[state-dump] - first task request bundle: N/A\n", + "[state-dump] - num objects queued: 0\n", + "[state-dump] - num objects actively pulled (all): 0\n", + "[state-dump] - num objects actively pulled / pinned: 0\n", + "[state-dump] - num bundles being pulled: 0\n", + "[state-dump] - num pull retries: 0\n", + "[state-dump] - max timeout seconds: 0\n", + "[state-dump] - max timeout request is already processed. No entry.\n", + "[state-dump] \n", + "[state-dump] WorkerPool:\n", + "[state-dump] - registered jobs: 0\n", + "[state-dump] - process_failed_job_config_missing: 0\n", + "[state-dump] - process_failed_rate_limited: 0\n", + "[state-dump] - process_failed_pending_registration: 0\n", + "[state-dump] - process_failed_runtime_env_setup_failed: 0\n", + "[state-dump] - num JAVA workers: 0\n", + "[state-dump] - num JAVA drivers: 0\n", + "[state-dump] - num object spill callbacks queued: 0\n", + "[state-dump] - num object restore queued: 0\n", + "[state-dump] - num util functions queued: 0\n", + "[state-dump] - num PYTHON workers: 0\n", + "[state-dump] - num PYTHON drivers: 0\n", + "[state-dump] - num object spill callbacks queued: 0\n", + "[state-dump] - num object restore queued: 0\n", + "[state-dump] - num util functions queued: 0\n", + "[state-dump] - num idle workers: 0\n", + "[state-dump] TaskDependencyManager:\n", + "[state-dump] - task deps map size: 0\n", + "[state-dump] - get req map size: 0\n", + "[state-dump] - wait req map size: 0\n", + "[state-dump] - local objects map size: 0\n", + "[state-dump] WaitManager:\n", + "[state-dump] - num active wait requests: 0\n", + "[state-dump] Subscriber:\n", + "[state-dump] Channel WORKER_OBJECT_EVICTION\n", + "[state-dump] - cumulative subscribe requests: 0\n", + "[state-dump] - cumulative unsubscribe requests: 0\n", + "[state-dump] - active subscribed publishers: 0\n", + "[state-dump] - cumulative published messages: 0\n", + "[state-dump] - cumulative processed messages: 0\n", + "[state-dump] Channel WORKER_REF_REMOVED_CHANNEL\n", + "[state-dump] - cumulative subscribe requests: 0\n", + "[state-dump] - cumulative unsubscribe requests: 0\n", + "[state-dump] - active subscribed publishers: 0\n", + "[state-dump] - cumulative published messages: 0\n", + "[state-dump] - cumulative processed messages: 0\n", + "[state-dump] Channel WORKER_OBJECT_LOCATIONS_CHANNEL\n", + "[state-dump] - cumulative subscribe requests: 0\n", + "[state-dump] - cumulative unsubscribe requests: 0\n", + "[state-dump] - active subscribed publishers: 0\n", + "[state-dump] - cumulative published messages: 0\n", + "[state-dump] - cumulative processed messages: 0\n", + "[state-dump] num async plasma notifications: 0\n", + "[state-dump] Remote node managers: \n", + "[state-dump] Event stats:\n", + "[state-dump] Global stats: 27 total (13 active)\n", + "[state-dump] Queueing time: mean = 1.358 ms, max = 9.260 ms, min = 10.811 us, total = 36.653 ms\n", + "[state-dump] Execution time: mean = 793.299 us, total = 21.419 ms\n", + "[state-dump] Event stats:\n", + "[state-dump] \tPeriodicalRunner.RunFnPeriodically - 11 total (2 active, 1 running), Execution time: mean = 260.679 us, total = 2.867 ms, Queueing time: mean = 3.330 ms, max = 9.260 ms, min = 37.726 us, total = 36.630 ms\n", + "[state-dump] \tMemoryMonitor.CheckIsMemoryUsageAboveThreshold - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeManager.deadline_timer.debug_state_dump - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch.OnReplyReceived - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch - 1 total (0 active), Execution time: mean = 408.340 us, total = 408.340 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeManager.ScheduleAndDispatchTasks - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeManager.GCTaskFailureReason - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeManager.deadline_timer.record_metrics - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeInfoGcsService.grpc_client.RegisterNode.OnReplyReceived - 1 total (0 active), Execution time: mean = 354.162 us, total = 354.162 us, Queueing time: mean = 12.556 us, max = 12.556 us, min = 12.556 us, total = 12.556 us\n", + "[state-dump] \tNodeManager.deadline_timer.flush_free_objects - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tRayletWorkerPool.deadline_timer.kill_idle_workers - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeInfoGcsService.grpc_client.RegisterNode - 1 total (0 active), Execution time: mean = 917.704 us, total = 917.704 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tInternalPubSubGcsService.grpc_client.GcsSubscriberPoll - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeInfoGcsService.grpc_client.GetInternalConfig.OnReplyReceived - 1 total (0 active), Execution time: mean = 16.193 ms, total = 16.193 ms, Queueing time: mean = 10.811 us, max = 10.811 us, min = 10.811 us, total = 10.811 us\n", + "[state-dump] \tNodeManager.deadline_timer.spill_objects_when_over_threshold - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tNodeInfoGcsService.grpc_client.GetInternalConfig - 1 total (0 active), Execution time: mean = 678.466 us, total = 678.466 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] \tClusterResourceManager.ResetRemoteNodeView - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "[state-dump] DebugString() time ms: 0\n", + "[state-dump] \n", + "[state-dump] \n", + "[2024-03-28 14:19:20,702 I 4038 4038] (raylet) accessor.cc:627: Received notification for node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, IsAlive = 1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-03-28 14:19:21,279\tINFO (log_monitor) log_monitor.py:155 -- Starting log monitor with [max open files=200], [is_autoscaler_v2=False]\n", + ":job_id:01000000\n", + ":job_id:01000000\n", + ":job_id:01000000\n", + ":job_id:01000000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2024-03-28 14:19:20,730 I 2037 2037] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) core_worker_process.cc:107: Constructing CoreWorkerProcess. pid: 2037\n", + "[2024-03-28 14:19:20,732 I 2037 2037] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:20,734 I 4038 4038] (raylet) worker_pool.cc:495: Started worker process with pid 4094, the token is 0\n", + "[2024-03-28 14:19:20,736 I 4038 4038] (raylet) worker_pool.cc:495: Started worker process with pid 4095, the token is 1\n", + "[2024-03-28 14:19:20,737 I 4038 4038] (raylet) worker_pool.cc:495: Started worker process with pid 4096, the token is 2\n", + "[2024-03-28 14:19:20,739 I 4038 4038] (raylet) worker_pool.cc:495: Started worker process with pid 4097, the token is 3\n", + "[2024-03-28 14:19:21,182 I 4094 4094] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) core_worker_process.cc:107: Constructing CoreWorkerProcess. pid: 4094\n", + "[2024-03-28 14:19:21,187 I 4094 4094] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:21,189 I 4094 4094] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) grpc_server.cc:129: worker server started, listening on port 45897.\n", + "[2024-03-28 14:19:21,194 I 4094 4094] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) core_worker.cc:252: Initializing worker at address: 192.168.194.218:45897, worker ID 20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c, raylet d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[2024-03-28 14:19:21,196 I 4094 4094] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) task_event_buffer.cc:177: Reporting task events to GCS every 1000ms.\n", + "[2024-03-28 14:19:21,198 I 4038 4059] (raylet) object_store.cc:35: Object store current usage 8e-09 / 2.0253 GB.\n", + "[2024-03-28 14:19:21,199 I 4094 4094] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) core_worker.cc:675: Adjusted worker niceness to 15\n", + "[2024-03-28 14:19:21,200 I 4094 4147] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) core_worker.cc:614: Event stats:\n", + "\n", + "\n", + "Global stats: 15 total (9 active)\n", + "Queueing time: mean = 515.625 us, max = 3.187 ms, min = 51.786 us, total = 7.734 ms\n", + "Execution time: mean = 229.605 us, total = 3.444 ms\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 7 total (5 active, 1 running), Execution time: mean = 4.856 us, total = 33.992 us, Queueing time: mean = 462.691 us, max = 3.187 ms, min = 51.786 us, total = 3.239 ms\n", + "\tCoreWorker.ExitIfParentRayletDies - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tPublisher.CheckDeadSubscribers - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo - 1 total (0 active), Execution time: mean = 2.036 ms, total = 2.036 ms, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tNodeInfoGcsService.grpc_client.GetAllNodeInfo - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberPoll - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch.OnReplyReceived - 1 total (0 active), Execution time: mean = 386.466 us, total = 386.466 us, Queueing time: mean = 2.247 ms, max = 2.247 ms, min = 2.247 ms, total = 2.247 ms\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo.OnReplyReceived - 1 total (0 active), Execution time: mean = 45.561 us, total = 45.561 us, Queueing time: mean = 2.248 ms, max = 2.248 ms, min = 2.248 ms, total = 2.248 ms\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch - 1 total (0 active), Execution time: mean = 942.131 us, total = 942.131 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\n", + "-----------------\n", + "Task Event stats:\n", + "\n", + "IO Service Stats:\n", + "\n", + "Global stats: 3 total (2 active)\n", + "Queueing time: mean = 2.429 us, max = 7.287 us, min = 7.287 us, total = 7.287 us\n", + "Execution time: mean = 129.916 us, total = 389.747 us\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 1 total (0 active), Execution time: mean = 389.747 us, total = 389.747 us, Queueing time: mean = 7.287 us, max = 7.287 us, min = 7.287 us, total = 7.287 us\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tCoreWorker.deadline_timer.flush_task_events - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "Other Stats:\n", + "\tgrpc_in_progress:1\n", + "\tcurrent number of task status events in buffer: 0\n", + "\tcurrent number of profile events in buffer: 0\n", + "\tcurrent number of dropped task attempts tracked: 0\n", + "\ttotal task events sent: 0 MiB\n", + "\ttotal number of task attempts sent: 0\n", + "\ttotal number of task attempts dropped reported: 0\n", + "\ttotal number of sent failure: 0\n", + "\tnum status task events dropped: 0\n", + "\tnum profile task events dropped: 0\n", + "\n", + "\n", + "[2024-03-28 14:19:21,200 I 4094 4147] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) accessor.cc:627: Received notification for node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, IsAlive = 1\n", + "[2024-03-28 14:19:21,200 I 4094 4147] (python-core-worker-20a7e6dfdd83461bee427864b8b279311989b8fdb831fbe90b94182c) core_worker.cc:4552: Number of alive nodes:1\n", + "[2024-03-28 14:19:21,280 I 4096 4096] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) core_worker_process.cc:107: Constructing CoreWorkerProcess. pid: 4096\n", + "[2024-03-28 14:19:21,280 I 4095 4095] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) core_worker_process.cc:107: Constructing CoreWorkerProcess. pid: 4095\n", + "[2024-03-28 14:19:21,282 I 4095 4095] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:21,282 I 4096 4096] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:21,283 I 4095 4095] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) grpc_server.cc:129: worker server started, listening on port 42653.\n", + "[2024-03-28 14:19:21,284 I 4096 4096] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) grpc_server.cc:129: worker server started, listening on port 32887.\n", + "[2024-03-28 14:19:21,286 I 4095 4095] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) core_worker.cc:252: Initializing worker at address: 192.168.194.218:42653, worker ID bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7, raylet d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[2024-03-28 14:19:21,287 I 4096 4096] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) core_worker.cc:252: Initializing worker at address: 192.168.194.218:32887, worker ID 4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d, raylet d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[2024-03-28 14:19:21,287 I 4095 4095] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) task_event_buffer.cc:177: Reporting task events to GCS every 1000ms.\n", + "[2024-03-28 14:19:21,287 I 4096 4096] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) task_event_buffer.cc:177: Reporting task events to GCS every 1000ms.\n", + "[2024-03-28 14:19:21,288 I 4095 4095] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) core_worker.cc:675: Adjusted worker niceness to 15\n", + "[2024-03-28 14:19:21,288 I 4095 4236] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) core_worker.cc:614: Event stats:\n", + "\n", + "\n", + "Global stats: 15 total (9 active)\n", + "Queueing time: mean = 5.591 us, max = 49.885 us, min = 8.963 us, total = 83.864 us\n", + "Execution time: mean = 70.270 us, total = 1.054 ms\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 7 total (5 active, 1 running), Execution time: mean = 3.428 us, total = 23.996 us, Queueing time: mean = 9.353 us, max = 49.885 us, min = 15.584 us, total = 65.469 us\n", + "\tPublisher.CheckDeadSubscribers - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch.OnReplyReceived - 1 total (0 active), Execution time: mean = 98.076 us, total = 98.076 us, Queueing time: mean = 9.432 us, max = 9.432 us, min = 9.432 us, total = 9.432 us\n", + "\tNodeInfoGcsService.grpc_client.GetAllNodeInfo - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tCoreWorker.ExitIfParentRayletDies - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo.OnReplyReceived - 1 total (0 active), Execution time: mean = 17.170 us, total = 17.170 us, Queueing time: mean = 8.963 us, max = 8.963 us, min = 8.963 us, total = 8.963 us\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberPoll - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch - 1 total (0 active), Execution time: mean = 460.173 us, total = 460.173 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo - 1 total (0 active), Execution time: mean = 454.639 us, total = 454.639 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\n", + "-----------------\n", + "Task Event stats:\n", + "\n", + "IO Service Stats:\n", + "\n", + "Global stats: 4 total (1 active)\n", + "Queueing time: mean = 5.481 us, max = 11.849 us, min = 10.074 us, total = 21.923 us\n", + "Execution time: mean = 176.471 us, total = 705.883 us\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 1 total (0 active), Execution time: mean = 110.491 us, total = 110.491 us, Queueing time: mean = 10.074 us, max = 10.074 us, min = 10.074 us, total = 10.074 us\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData - 1 total (0 active), Execution time: mean = 582.849 us, total = 582.849 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tCoreWorker.deadline_timer.flush_task_events - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData.OnReplyReceived - 1 total (0 active), Execution time: mean = 12.543 us, total = 12.543 us, Queueing time: mean = 11.849 us, max = 11.849 us, min = 11.849 us, total = 11.849 us\n", + "Other Stats:\n", + "\tgrpc_in_progress:0\n", + "\tcurrent number of task status events in buffer: 0\n", + "\tcurrent number of profile events in buffer: 0\n", + "\tcurrent number of dropped task attempts tracked: 0\n", + "\ttotal task events sent: 0 MiB\n", + "\ttotal number of task attempts sent: 0\n", + "\ttotal number of task attempts dropped reported: 0\n", + "\ttotal number of sent failure: 0\n", + "\tnum status task events dropped: 0\n", + "\tnum profile task events dropped: 0\n", + "\n", + "\n", + "[2024-03-28 14:19:21,288 I 4096 4096] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) core_worker.cc:675: Adjusted worker niceness to 15\n", + "[2024-03-28 14:19:21,288 I 4096 4239] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) core_worker.cc:614: Event stats:\n", + "\n", + "\n", + "Global stats: 15 total (9 active)\n", + "Queueing time: mean = 7.167 us, max = 60.244 us, min = 11.895 us, total = 107.508 us\n", + "Execution time: mean = 74.811 us, total = 1.122 ms\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 7 total (5 active, 1 running), Execution time: mean = 14.731 us, total = 103.115 us, Queueing time: mean = 10.601 us, max = 60.244 us, min = 13.962 us, total = 74.206 us\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberPoll - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch.OnReplyReceived - 1 total (0 active), Execution time: mean = 95.383 us, total = 95.383 us, Queueing time: mean = 21.407 us, max = 21.407 us, min = 21.407 us, total = 21.407 us\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo.OnReplyReceived - 1 total (0 active), Execution time: mean = 16.337 us, total = 16.337 us, Queueing time: mean = 11.895 us, max = 11.895 us, min = 11.895 us, total = 11.895 us\n", + "\tNodeInfoGcsService.grpc_client.GetAllNodeInfo - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tPublisher.CheckDeadSubscribers - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo - 1 total (0 active), Execution time: mean = 579.373 us, total = 579.373 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch - 1 total (0 active), Execution time: mean = 327.963 us, total = 327.963 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tCoreWorker.ExitIfParentRayletDies - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\n", + "-----------------\n", + "Task Event stats:\n", + "\n", + "IO Service Stats:\n", + "\n", + "Global stats: 1 total (1 active)\n", + "Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "Execution time: mean = 0.000 s, total = 0.000 s\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 1 total (1 active, 1 running), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "Other Stats:\n", + "\tgrpc_in_progress:0\n", + "\tcurrent number of task status events in buffer: 0\n", + "\tcurrent number of profile events in buffer: 0\n", + "\tcurrent number of dropped task attempts tracked: 0\n", + "\ttotal task events sent: 0 MiB\n", + "\ttotal number of task attempts sent: 0\n", + "\ttotal number of task attempts dropped reported: 0\n", + "\ttotal number of sent failure: 0\n", + "\tnum status task events dropped: 0\n", + "\tnum profile task events dropped: 0\n", + "\n", + "\n", + "[2024-03-28 14:19:21,289 I 4096 4239] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) accessor.cc:627: Received notification for node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, IsAlive = 1\n", + "[2024-03-28 14:19:21,289 I 4096 4239] (python-core-worker-4bf7934bf6c30c19b27d1c27d18a8f336d9213d86ae6f8615f0c800d) core_worker.cc:4552: Number of alive nodes:1\n", + "[2024-03-28 14:19:21,289 I 4095 4236] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) accessor.cc:627: Received notification for node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, IsAlive = 1\n", + "[2024-03-28 14:19:21,289 I 4095 4236] (python-core-worker-bb313025f1128303d4253e049cda0ca984fe80ebec04a5dd8a01cec7) core_worker.cc:4552: Number of alive nodes:1\n", + "[2024-03-28 14:19:21,297 I 4097 4097] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) core_worker_process.cc:107: Constructing CoreWorkerProcess. pid: 4097\n", + "[2024-03-28 14:19:21,298 I 4097 4097] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) io_service_pool.cc:35: IOServicePool is running with 1 io_service.\n", + "[2024-03-28 14:19:21,299 I 4097 4097] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) grpc_server.cc:129: worker server started, listening on port 40535.\n", + "[2024-03-28 14:19:21,302 I 4097 4097] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) core_worker.cc:252: Initializing worker at address: 192.168.194.218:40535, worker ID fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19, raylet d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[2024-03-28 14:19:21,303 I 4097 4097] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) task_event_buffer.cc:177: Reporting task events to GCS every 1000ms.\n", + "[2024-03-28 14:19:21,304 I 4097 4097] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) core_worker.cc:675: Adjusted worker niceness to 15\n", + "[2024-03-28 14:19:21,304 I 4097 4291] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) core_worker.cc:614: Event stats:\n", + "\n", + "\n", + "Global stats: 15 total (9 active)\n", + "Queueing time: mean = 4.512 us, max = 41.335 us, min = 6.442 us, total = 67.685 us\n", + "Execution time: mean = 65.264 us, total = 978.962 us\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 7 total (5 active, 1 running), Execution time: mean = 3.055 us, total = 21.388 us, Queueing time: mean = 7.237 us, max = 41.335 us, min = 9.323 us, total = 50.658 us\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberPoll - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch - 1 total (0 active), Execution time: mean = 351.990 us, total = 351.990 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tCoreWorker.ExitIfParentRayletDies - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tNodeInfoGcsService.grpc_client.GetAllNodeInfo - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch.OnReplyReceived - 1 total (0 active), Execution time: mean = 100.041 us, total = 100.041 us, Queueing time: mean = 6.442 us, max = 6.442 us, min = 6.442 us, total = 6.442 us\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo - 1 total (0 active), Execution time: mean = 476.595 us, total = 476.595 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tPublisher.CheckDeadSubscribers - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo.OnReplyReceived - 1 total (0 active), Execution time: mean = 28.948 us, total = 28.948 us, Queueing time: mean = 10.585 us, max = 10.585 us, min = 10.585 us, total = 10.585 us\n", + "\n", + "-----------------\n", + "Task Event stats:\n", + "\n", + "IO Service Stats:\n", + "\n", + "Global stats: 4 total (1 active)\n", + "Queueing time: mean = 15.362 us, max = 53.848 us, min = 7.599 us, total = 61.447 us\n", + "Execution time: mean = 118.044 us, total = 472.175 us\n", + "Event stats:\n", + "\tCoreWorker.deadline_timer.flush_task_events - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData.OnReplyReceived - 1 total (0 active), Execution time: mean = 13.660 us, total = 13.660 us, Queueing time: mean = 53.848 us, max = 53.848 us, min = 53.848 us, total = 53.848 us\n", + "\tPeriodicalRunner.RunFnPeriodically - 1 total (0 active), Execution time: mean = 126.969 us, total = 126.969 us, Queueing time: mean = 7.599 us, max = 7.599 us, min = 7.599 us, total = 7.599 us\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData - 1 total (0 active), Execution time: mean = 331.546 us, total = 331.546 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "Other Stats:\n", + "\tgrpc_in_progress:0\n", + "\tcurrent number of task status events in buffer: 0\n", + "\tcurrent number of profile events in buffer: 0\n", + "\tcurrent number of dropped task attempts tracked: 0\n", + "\ttotal task events sent: 0 MiB\n", + "\ttotal number of task attempts sent: 0\n", + "\ttotal number of task attempts dropped reported: 0\n", + "\ttotal number of sent failure: 0\n", + "\tnum status task events dropped: 0\n", + "\tnum profile task events dropped: 0\n", + "\n", + "\n", + "[2024-03-28 14:19:21,304 I 4097 4291] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) accessor.cc:627: Received notification for node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, IsAlive = 1\n", + "[2024-03-28 14:19:21,304 I 4097 4291] (python-core-worker-fd588d46119358932b355c0a443e6408e7922ada624c4638f223cf19) core_worker.cc:4552: Number of alive nodes:1\n", + "[2024-03-28 14:19:21,305 I 3938 3938] (gcs_server) gcs_job_manager.cc:42: Adding job, job id = 01000000, driver pid = 2037\n", + "[2024-03-28 14:19:21,305 I 3938 3938] (gcs_server) gcs_job_manager.cc:57: Finished adding job, job id = 01000000, driver pid = 2037\n", + "[2024-03-28 14:19:21,305 I 4038 4038] (raylet) node_manager.cc:587: New job has started. Job id 01000000 Driver pid 2037 is dead: 0 driver address: 192.168.194.218\n", + "[2024-03-28 14:19:21,305 I 4038 4038] (raylet) worker_pool.cc:678: Job 01000000 already started in worker pool.\n", + "[2024-03-28 14:19:21,306 I 2037 2037] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) grpc_server.cc:129: driver server started, listening on port 35829.\n", + "[2024-03-28 14:19:21,309 I 2037 2037] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) core_worker.cc:252: Initializing worker at address: 192.168.194.218:35829, worker ID 01000000ffffffffffffffffffffffffffffffffffffffffffffffff, raylet d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e\n", + "[2024-03-28 14:19:21,310 I 2037 2037] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) task_event_buffer.cc:177: Reporting task events to GCS every 1000ms.\n", + "[2024-03-28 14:19:21,313 I 2037 4093] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) core_worker.cc:614: Event stats:\n", + "\n", + "\n", + "Global stats: 13 total (8 active)\n", + "Queueing time: mean = 5.262 us, max = 47.114 us, min = 7.176 us, total = 68.404 us\n", + "Execution time: mean = 88.153 us, total = 1.146 ms\n", + "Event stats:\n", + "\tPeriodicalRunner.RunFnPeriodically - 6 total (5 active, 1 running), Execution time: mean = 814.167 ns, total = 4.885 us, Queueing time: mean = 1.196 us, max = 7.176 us, min = 7.176 us, total = 7.176 us\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch - 1 total (0 active), Execution time: mean = 445.683 us, total = 445.683 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo.OnReplyReceived - 1 total (0 active), Execution time: mean = 27.963 us, total = 27.963 us, Queueing time: mean = 14.114 us, max = 14.114 us, min = 14.114 us, total = 14.114 us\n", + "\tNodeInfoGcsService.grpc_client.GetAllNodeInfo - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberCommandBatch.OnReplyReceived - 1 total (0 active), Execution time: mean = 130.210 us, total = 130.210 us, Queueing time: mean = 47.114 us, max = 47.114 us, min = 47.114 us, total = 47.114 us\n", + "\tWorkerInfoGcsService.grpc_client.AddWorkerInfo - 1 total (0 active), Execution time: mean = 537.254 us, total = 537.254 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tPublisher.CheckDeadSubscribers - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tInternalPubSubGcsService.grpc_client.GcsSubscriberPoll - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\n", + "-----------------\n", + "Task Event stats:\n", + "\n", + "IO Service Stats:\n", + "\n", + "Global stats: 4 total (1 active)\n", + "Queueing time: mean = 4.390 us, max = 11.594 us, min = 5.966 us, total = 17.560 us\n", + "Execution time: mean = 131.825 us, total = 527.300 us\n", + "Event stats:\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData - 1 total (0 active), Execution time: mean = 387.791 us, total = 387.791 us, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tCoreWorker.deadline_timer.flush_task_events - 1 total (1 active), Execution time: mean = 0.000 s, total = 0.000 s, Queueing time: mean = 0.000 s, max = -0.000 s, min = 9223372036.855 s, total = 0.000 s\n", + "\tPeriodicalRunner.RunFnPeriodically - 1 total (0 active), Execution time: mean = 123.304 us, total = 123.304 us, Queueing time: mean = 5.966 us, max = 5.966 us, min = 5.966 us, total = 5.966 us\n", + "\tTaskInfoGcsService.grpc_client.AddTaskEventData.OnReplyReceived - 1 total (0 active), Execution time: mean = 16.205 us, total = 16.205 us, Queueing time: mean = 11.594 us, max = 11.594 us, min = 11.594 us, total = 11.594 us\n", + "Other Stats:\n", + "\tgrpc_in_progress:0\n", + "\tcurrent number of task status events in buffer: 1\n", + "\tcurrent number of profile events in buffer: 0\n", + "\tcurrent number of dropped task attempts tracked: 0\n", + "\ttotal task events sent: 0 MiB\n", + "\ttotal number of task attempts sent: 0\n", + "\ttotal number of task attempts dropped reported: 0\n", + "\ttotal number of sent failure: 0\n", + "\tnum status task events dropped: 0\n", + "\tnum profile task events dropped: 0\n", + "\n", + "\n", + "[2024-03-28 14:19:21,313 I 2037 4093] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) accessor.cc:627: Received notification for node id = d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e, IsAlive = 1\n", + "[2024-03-28 14:19:21,313 I 2037 4093] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) core_worker.cc:4552: Number of alive nodes:1\n", + "Number of principal comp. used: 51 of 256\n", + "Lambda index: 0 Wavelength: 2.110 micron\n", + "lam00_ncomp051_frac0.20\n", + "PSF Size: 11\n", + "Number of positions: 316\n", + "[2024-03-28 14:19:21,371 I 2037 2037] (python-core-driver-01000000ffffffffffffffffffffffffffffffffffffffffffffffff) direct_actor_task_submitter.cc:36: Set max pending calls to -1 for actor 5225c724ae7a9657de3ccd3201000000\n", + "Number of positions per chunk: 40\n", + "[2024-03-28 14:19:21,372 I 3938 3938] (gcs_server) gcs_actor_manager.cc:262: Registering actor, job id = 01000000, actor id = 5225c724ae7a9657de3ccd3201000000\n", + "[2024-03-28 14:19:21,373 I 3938 3938] (gcs_server) gcs_actor_manager.cc:268: Registered actor, job id = 01000000, actor id = 5225c724ae7a9657de3ccd3201000000\n", + "[2024-03-28 14:19:21,374 I 3938 3938] (gcs_server) gcs_actor_manager.cc:287: Creating actor, job id = 01000000, actor id = 5225c724ae7a9657de3ccd3201000000\n", + "[2024-03-28 14:19:21,374 I 3938 3938] (gcs_server) gcs_actor_scheduler.cc:312: Start leasing worker from node d66604e09bd021d610f4dd8694bdaf55287a596af8cb5695ddf1c59e for actor 5225c724ae7a9657de3ccd3201000000, job id = 01000000\n", + "[2024-03-28 14:19:21,376 I 4038 4038] (raylet) worker_pool.cc:495: Started worker process with pid 4316, the token is 4\n", + ":job_id:01000000\n", + ":job_id:01000000\n", + ":job_id:01000000\n", + ":job_id:01000000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/316 [00:00\n", + "/home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/ray/dashboard/dashboard.py:236: DeprecationWarning: The 'warn' method is deprecated, use 'warning' instead\n", + " logger.warn(\"Exiting with SIGTERM immediately...\")\n", + "2024-03-28 14:19:35,978\tWARNING (dashboard) dashboard.py:236 -- Exiting with SIGTERM immediately...\n" + ] + } + ], + "source": [ + "if run_reduction:\n", + " all_results = run_complete_reduction(\n", + " data_full=data_full,\n", + " flux_psf_full=flux_psf_full,\n", + " pa=pa,\n", + " instrument=used_instrument,\n", + " reduction_parameters=reduction_parameters,\n", + " temporal_components_fraction=temporal_components_fraction,\n", + " wavelength_indices=wavelength_indices,\n", + " inverse_variance_full=inverse_variance_full,\n", + " bad_frames=bad_frames,\n", + " amplitude_modulation_full=amplitude_modulation_full)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The (non-normalized) contrast images, as well as the instrument and reduction parameters will be saved in the \"result_folder\", and are ready to be read into the detection and analysis module." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Normalization, contrast curves, and detection maps\n", + "\n", + "The detection module takes care of everything else that acts on the basic output of TRAP, such as normalizing the detection map and contrast curves, extracting signals and perform spectral template matching on multi-wavelength data (work in progress). Let us first create the object that will encapsulate the analysis for us (for one specific number of principle components used)." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "from trap.detection import DetectionAnalysis\n", + "\n", + "component_fraction = temporal_components_fraction[0]\n", + "analysis = DetectionAnalysis()\n", + "analysis.read_output(\n", + " component_fraction,\n", + " result_folder=reduction_parameters.result_folder,\n", + " reduction_type='temporal',\n", + " read_parameters=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For now let us perform a normalization of the SNR map (as described in Samland et al. 2021). Masking all pixels above 5-sigma to avoid contamination by very bright sources. This routine will also routine the contrast curves for us. Unless `inplace` is set to False, the output will be put directly into the analysis object as a directionary called `detection_products`." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "detection_threshold = 5.\n", + "analysis.contrast_table_and_normalization(\n", + " save=False,\n", + " mask_above_sigma=detection_threshold)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['normalized_detection_cube', 'uncertainty_cube', 'median_uncertainty_cube', 'contrast_tables', 'contrast_table'])" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analysis.detection_products.keys()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `detection_products` contains the `normalized_detection_cube`, which contains the normalized detection map for each wavelength reduced (in this case the length is 1)." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAHbCAYAAAA9GhWYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABK70lEQVR4nO3de1xUdf7H8fegclFAMUBGU9S8ViqKRWiFlqbWT7JtrfXXardfUWma2pZ2A9syu1pZKbaVttXPas1qrbQyxbxf+ZV5Jy+7Oph3xAsoc35/uM4wCXgGD8wM83o+HvPocC7f+Rwn4MPn+z3fr80wDEMAAAA4pxBfBwAAABAoSJwAAABMInECAAAwicQJAADAJBInAAAAk0icAAAATCJxAgAAMInECQAAwKTavg4AAAAEhhMnTqi4uNjSNkNDQxUeHm5pm1WJxAkAAJzTiRMn1CIxUvm/lVjabkJCgrZt2xYwyVNAddXt2rVLf/7zn3XBBRcoIiJCHTp00KpVq1zHs7Ky1K5dO9WrV08xMTHq1auXli9ffs5233zzTTVv3lzh4eFKSUnRihUrqvI2AAAIOMXFxcr/rUQ7VjfXwc0tLXntWN1c+fn5llexqlLAVJwOHjyo7t27q2fPnvrmm28UFxenLVu2KCYmxnVOmzZt9MYbb6hly5Y6fvy4Jk6cqOuuu05bt25VXFxcme1+/PHHGjVqlKZMmaKUlBS9+uqr6tOnjzZt2qT4+Pjquj0AAAJCZJRNkVE2S9pyypp2qpMtUBb5HTNmjBYvXqwff/zR9DUFBQWqX7++vv/+e1177bVlnpOSkqLLLrtMb7zxhiTJ6XSqadOmevDBBzVmzBhLYgcAINCd+Z3626ZERUdZ02FVcMSp+LY7dPjwYUVHR1vSZlULmK66L7/8Ul27dtXAgQMVHx+vzp076+233y73/OLiYk2dOlX169dXp06dyj1n9erV6tWrl2tfSEiIevXqpaVLl1p+DwAAILAFTFfdr7/+qsmTJ2vUqFF67LHHtHLlSg0fPlyhoaG6/fbbXefNnj1bf/rTn3Ts2DHZ7XZ99913io2NLbPNffv2qaSkRI0aNfLY36hRI23cuLHMa5xOp3Jzc3XkyBHZbGWXGBMSEpSQkFDJOwUABIP8/Hzl5+eXecwwDEVFRSkpKUkhIf5V43DKkFPWdFZZ1U51CpjEyel0qmvXrho/frwkqXPnzlq3bp2mTJnikTj17NlTubm52rdvn95++23dcsstWr58uWXjlXJzc5WcnGxJWwAAVGT16tXq0qWLr8Pw4JRTTgvbCjQBkzjZ7XZdfPHFHvvat2+vmTNneuyrV6+eWrVqpVatWumKK65Q69at9c4772js2LFntRkbG6tatWppz549Hvv37NlTbsXoyJEjkqTXXntNSUlJZZ5zvhWn3NxcpaWlKScnp9z3sEJNep+adC817X1q0r1U1/vUpHuprvcJxHupqOKUm5urESNGuH7nwH8ETOLUvXt3bdq0yWPf5s2blZiYWOF1TqdTRUVFZR4LDQ1VcnKy5s2bpwEDBrjOnzdvnoYNG1bmNWe655KSknT11Vd7eRfmREZGuv5blYPlatL71KR7qWnvU5PupbrepybdS3W9TyDeS3R0tNq0aVPhOeUNCfGlEsNQiUXPlVnVTnXyr47TCowcOVLLli3T+PHjtXXrVn300UeaOnWqhg4dKkk6evSoHnvsMS1btkw7duzQ6tWrddddd2nXrl0aOHCgq51rr73W9QSdJI0aNUpvv/22pk+frg0bNuj+++/X0aNHdeedd1b7PQIAAP8WMBWnyy67TLNmzdLYsWP19NNPq0WLFnr11Vd12223SZJq1aqljRs3avr06dq3b58uuOACXXbZZfrxxx91ySWXuNrJy8vTvn37XF/feuut2rt3r5566inl5+crKSlJc+bMOWvAeHWy2+3KzMyU3W7nffxMTfs347Pxz/epSZ+LVLP+zWraZ1MZwT44PGDmcfIXCxcudPVvV1VXHby3Zs0aJScn++VAymDHZ+O/+Gz8lz/+rjkzj9O2jXZFWTSP05EjTrVo52AeJwAAgJooYLrqAACA7wV7Vx0VJy+dmWaACS79C+MO/Befjf/is/Ff/K7xX4xx8tKZPt5A6o8FAAQWf/xdcyamzRsaWTrGqU37PX51n+dCVx0AADDN+Z+XVW0FGrrqAAAATKLiBAAATCuRoRKLBnVb1U51ouIEAABgEhUnAABgWolx+mVVW4GGxAkAAJjG4HAAAACYQsUJAACY5pRNJbJZ1lagoeIEAABgEhUnAABgmtM4/bKqrUBD4gQAAEwrsbCrzqp2qhNddQAAACZRcQIAAKZRcQIAAIApVJwqKTc3V5GRkZIku90uu93u44gAAIHM4XDI4XBIkgoLC30cTfmchk1Ow6LpCCxqpzqROFVSWlqaazszM1NZWVm+CwYAEPCys7M1btw4X4dxTsHeVUfiVEk5OTkeFScAAM5HRkaG0tPTJZ2uOJX+Ax3+g8SpkpKSkhQdHe3rMAAANUTpYR8FBQU+jqZ8JQpRiUVDpEssaaV6MTgcAADAJCpOAADANMPCweEGg8MBAEBNFuyDw+mqAwAAMImKEwAAMK3ECFGJYdHg8ABc5JeKEwAAgElUnAAAgGlO2eS0qO7iVOCVnEicAACAaQwOBwAAgClUnAAAgGnWDg6nqw4AANRgp8c4WdPFZlU71YmuOgAAAJOoOAEAANOcFi7yG4hP1VFxAgAAMImKEwAAMI3B4QAAACY5FRLUE2DSVQcAAGASFScAAGBaiWFTiWHRzOEWtVOdqDgBAACYRMUJAACYVmLhdAQlATjGicQJAACY5jRC5LToqTpnAD5VR1cdAACASVScKik3N1eRkZGSJLvdLrvd7uOIAACBzOFwyOFwSJIKCwt9HE35gr2rjopTJaWlpSk5OVnJycnKzs72dTgAgACXnZ3t+r2Slpbm63BQDipOlZSTk+NRcQIA4HxkZGQoPT1d0umKk78mT05ZN42A05JWqheJUyUlJSUpOjra12EAAGqI0sM+CgoKfBxN+aydOTzwOr4CL2IAAAAfoeIEAABMs3aR38Cr3wRexAAAAD5CxQkAAJjmlE1OWTU4PPDWqiNxAgAAptFVBwAAAFNInAAAgGlnZg636lVZzz33nC677DJFRUUpPj5eAwYM0KZNmyy807KROAEAgICTk5OjoUOHatmyZfruu+908uRJXXfddTp69GiVvi9jnAAAgGlOwyanVTOHn0c7c+bM8fh62rRpio+P1+rVq3X11Vefb2jlInECAACmOS1c5NfKmcMPHz4sSWrYsKFlbZaFxAkAAPhUbm6ua/3X3yu9FE15nE6nHnroIXXv3l2XXnppVYToQuIEAABMcxohclo0jcCZdipa0DgzM1NZWVkVtjN06FCtW7dOixYtsiSuipA4AQAAn8rJyamw4lSRYcOGafbs2Vq4cKEuvPDCqgjPA4kTAAAwrUQ2lVg04/eZdpKSkhQdHe3VtYZh6MEHH9SsWbO0YMECtWjRwpKYzoXECQAAmFYVXXWVMXToUH300Uf64osvFBUVpfz8fElS/fr1FRERYUl8ZWEeJwAAEHAmT56sw4cPq0ePHq4B5Ha7XR9//HGVvi8VJwAAYFqJZGFXXeUZhmFJDN4icQIAAKb5S1edrwRexAAAAD5CxQkAAJhWYoSoxKJKkVXtVKfAixgAAMBHqDgBAADTDNnktGhwuGFRO9WJxKmSSq+rY2YdHQAAKuJwOORwOCRJhYWFPo6mfHTVoVLS0tKUnJys5ORkZWdn+zocAECAy87Odv1eqWjtNvgWFadKKr2uDtUmAMD5ysjIUHp6uqTTFSd/TZ6chk1Ow5ouNqvaqU4kTpVUmXV1AAAoT+lhHwUFBT6OBuUhcQIAAKaVKEQlFo30saqd6kTiBAAATAv2rrrAS/UAAAB8hIoTAAAwzakQOS2qu1jVTnUKvIgBAAB8hIoTAAAwrcSwqcSisUlWtVOdSJwAAIBpDA4HAACAKVScAACAaYYRIqdFa8wZrFUHAABQc1FxAgAAppXIphJZNDjconaqE4kTAAAwzWlYN6jbaVjSTLWiqw4AAMAkKk4AAMA0p4WDw61qpzoFXsQAAAA+QsUJAACY5pRNTosGdVvVTnUicQIAAKYF+5IrdNUBAACYFDCJ0+TJk9WxY0dFR0crOjpaqamp+uabb1zHp06dqh49eig6Olo2m02HDh06Z5tZWVmy2Wwer3bt2lXhXQAAENjODA636hVoAibiCy+8UBMmTNDq1au1atUqXXPNNbrxxhv1yy+/SJKOHTumvn376rHHHvOq3UsuuUQOh8P1WrRoUVWEDwAAaoCAGePUv39/j6+fffZZTZ48WcuWLdMll1yihx56SJK0YMECr9qtXbu2EhISLIoSAICazSmbdRNgMji8epSUlOjTTz/V0aNHlZqael5tbdmyRY0bN1Z4eLhSU1P13HPPqVmzZue8Ljc3V5GRkWUes9vtstvt5xUXAKBmO9PTUZbCwsJqjsY8w8Kn6gwSp6r1888/KzU1VSdOnFBkZKRmzZqliy++uNLtpaSkaNq0aWrbtq0cDofGjRunq666SuvWrVNUVFSF16alpZV7LDMzU1lZWZWOCwBQ82VnZ2vcuHG+DgNeCqjEqW3btsrNzdXhw4f1j3/8Q7fffrtycnIqnTz169fPtd2xY0elpKQoMTFRn3zyie6+++4Kr83Jyamw4gQAQEUyMjKUnp5e5rHCwsIK/0D3JadhYVddAE5HEFCJU2hoqFq1aiVJSk5O1sqVK/Xaa68pOzvbkvYbNGigNm3aaOvWrec8NykpSdHR0Za8LwAg+FQ0rKOgoKCaozGPJVcCmNPpVFFRkWXtFRYWKi8vj4oRAAAoU8BUnMaOHat+/fqpWbNmOnLkiD766CMtWLBAc+fOlSTl5+crPz/fVS36+eefFRUVpWbNmqlhw4aSpGuvvVY33XSThg0bJkl6+OGH1b9/fyUmJmr37t3KzMxUrVq1NGjQIN/cJAAAfo6uugDx22+/aciQIXI4HKpfv746duyouXPnqnfv3pKkKVOmeAyyu/rqqyVJ7733nu644w5JUl5envbt2+c659///rcGDRqk/fv3Ky4uTldeeaWWLVumuLi46rsxAAAQMGyGYRi+DiKQFBQUqH79+jp8+DBjnAAAVcIff9ecian/t3erTr1QS9o8ebRY/7zuHb+6z3MJmIoTAADwvWDvqgvoweEAAADViYoTAAAwjYoTAAAATKHiBAAATAv2ihOJEwAAMC3YEye66gAAAEyi4gQAAEwzJDllTaUoECeSpOIEAABgEhUnAABgWrCPcSJxAgAApgV74kRXHQAAgElUnAAAgGlUnAAAAGAKFScAAGBasFecSJwAAIBphmGTYVHCY1U71YmuOgAAAJOoOAEAANOcslk2c7hV7VQnEqdKys3NVWRkpCTJbrfLbrf7OCIAQCBzOBxyOBySpMLCQh9Hg/KQOFVSWlqaazszM1NZWVm+CwYAEPCys7M1btw4X4dxTgwOR6Xk5OR4VJwAADgfGRkZSk9Pl3S64lT6D3R/EuyDw0mcKikpKUnR0dG+DgMAUEOUHvZRUFDg42hQHhInAABgWrB31TEdAQAAgElUnAAAgGmMcQIAADDJsLCrLhATJ7rqAAAATKLiBAAATDMkGYZ1bQUaEicAAGCaUzbZgnjJFbrqAABAQFq4cKH69++vxo0by2az6fPPP6/y9yRxAgAApp15qs6q1/k4evSoOnXqpDfffNOiuzs3uuoAAEBA6tevn/r161et70niBAAATHMaNtksnjk8NzfXtf7r75VeisYfkDgBAADTDMPCp+r+005FCxpnZmYqKyvLmje0AIkTAADwqZycnAorTv6ExAkAAJhWFUuuJCUlKTo62pI2qxpP1QEAAJhExQkAAJjmT4v8FhYWauvWra6vt23bptzcXDVs2FDNmjU73/DKROIEAABMq4qn6ipr1apV6tmzp+vrUaNGSZJuv/12TZs27bzaLg+JEwAACEg9evSQYdUjfiaROAEAANOqYjqCQMLgcAAAAJOoOAEAANNOV5ysGhxuSTPVisQJAACY5k9P1fkCiVMllV5Xx9/W0QEABB6HwyGHwyHp9GP28E+McaqktLQ0JScnKzk5WdnZ2b4OBwAQ4LKzs12/Vypau83XDItfgYaKUyWVXleHahMA4HxlZGQoPT1d0umKkz8nT8GMxKmSAmldHQCA/ys97KOgoMDH0ZSPMU4AAABmWdnHFoB9dYxxAgAAMImKEwAAMM/CrjoFYFcdFScAAACTzqviVFRUpLCwMKtiAQAAfo616rzwzTff6Pbbb1fLli1Vp04d1a1bV9HR0UpLS9Ozzz6r3bt3V1WcAADAD5x5qs6qV6AxlTjNmjVLbdq00V133aXatWvr0Ucf1Weffaa5c+fqb3/7m9LS0vT999+rZcuWuu+++7R3796qjhsAAKDameqqe+GFFzRx4kT169dPISFn51q33HKLJGnXrl2aNGmSPvjgA40cOdLaSAEAgO8ZNusGdQdgxclU4rR06VJTjTVp0kQTJkw4r4AAAAD8FdMRAAAA04J9cLipxGnUqFGmG3zllVcqHQwAAPBzQT5zuKnEae3ataYas9kCr68SAADALFOJ0/z586s6DgAAEACCfZHfSs8cvnXrVs2dO1fHjx+XJBmB2FEJAADgBa8Hh+/fv1+33HKL5s+fL5vNpi1btqhly5a6++67FRMTo5dffrkq4gQQoK6+4QXX9sKvHvFhJAAsE8S1Eq8rTiNHjlSdOnW0c+dO1a1b17X/1ltv1Zw5cywNDgAA+Jdgnznc64rTt99+q7lz5+rCCy/02N+6dWvt2LHDssAAAAD8jdeJ09GjRz0qTWccOHCABX8BAKjpmI7AO1dddZXef/99/fWvf5V0egoCp9OpF154QT179rQ8QAD+o/n77pUBSj8PEp3r+UdT1L9L3NuOo67tnr3c1x9qHepxTXG0u2R/POm4a/vXQY9VPmAAVcD2n5dVbQUWrxOnF154Qddee61WrVql4uJiPfLII/rll1904MABLV68uCpiBAAA8AteDw6/9NJLtXnzZl155ZW68cYbdfToUf3hD3/Q2rVrddFFF1VFjAAAwF8YFr8CjNcVpxMnTqh+/fp6/PHHzzrmcDhkt9stCczf5ebmKjIyUpJkt9uD5r5R810+Z6zH1/sPRbq260Q4Xdsn90W4tkNOebYResTdVVcUX2pMpNP9U7I4yrNEfzy+1E9Qm3v72vnuJZ/2HIksfYnWpT9d1i0AAcnhcMjhcEiSCgsLfRwNyuN1xalLly7Kzc09a//MmTPVsWNHK2IKCGlpaUpOTlZycrKys7N9HQ4AIMBlZ2e7fq+kpaX5OpzyUXHyTo8ePXTFFVdo3LhxevTRR3X06FENHTpUn3zyiZ599tmqiNEv5eTkeFScAAA4HxkZGUpPT5d0uuLkt8mTYTv9sqqtAON14vTWW2/phhtu0P/8z/9o9uzZcjgcioyM1IoVK3TppZdWRYx+KSkpSdHR0b4OA7DEgEUPuLajwsI9jtVu6O6ei41wPyH3U34L13ZRjGd7p+q6i9kloe5tW4n7z8tT9TyvqXXCvV1cVMu17Sz1g7V2iLP0JWo5w/3H2q9/Onv4ABBISg/7KCgo8HE0KI/XiZMk9evXT3/4wx80efJk1a5dW//85z+DKmkCACBYGYbndCTn21ag8XqMU15enlJTUzV79mzNnTtXjzzyiNLT0/XII4/o5MmTVREjAACAX/C64pSUlKQbbrhBc+fOVYMGDdS7d29df/31GjJkiL777jutXbu2KuIEYLHXNvRybb/a/BfXdn6J52SWK4+3dG0vP+zunqsd756kUns9+90MW9njFkpC3fttnr1uOhnj3hFzgfuJol93xru24xod9rjGuc8d60UvveLaznt4lABUkSCfOdzritNbb72lGTNmqEGDBq593bp109q1a9WlSxcrYwMAAP7mzOBwq14BxuvEafDgwWXuj4qK0jvvvHPeAQEAAPgrU111X375pfr166c6deroyy+/LPc8m82m/v37WxYcAADwLzbDY47a824r0JhKnAYMGKD8/HzFx8drwIAB5Z5ns9lUUlJS7nEA/qNl2B7XdpNa7tm9Y383DXiUbZNru15IkWt7e8EFru1dsREe1xQkuqcTiN7p/plQeuxT+F7Pn5i2U+5rDtZxT/Vhi3Bfv3/zBZ7XlKryhx4MvJI/gMBjKnFyOp1lbgMAgCAT5IPDKzWPEwAACFLMHO69efPmaeLEidqwYYMkqX379nrooYfUq1evc1wJwJduX3GXa9se1sa1faTkX67tOjbP7vZrIvJd2w1qHXNtZ7Zyj3d8J/Jqj2uWhrV2bYcdqqWyxGwp9vh6byf31AKhv7l/NDnrlNoO/133XqlQT9Z3H2v/xETX9oZnRpb5/gBQGZWajqBv376KiorSiBEjNGLECEVHR+v666/Xm2++WRUxAgAAf8Eiv94ZP368Jk6cqGHDhrn2DR8+XN27d9f48eM1dOhQSwMEAADwF14nTocOHVLfvn3P2n/dddfp0UcftSQoAFWjqMT9Lf/T4Sau7bBST9IVOT1/LKSE73ZtD6jnntF7X4l7wd8hjZZ4XLMswj3beFEDd3sNN7qXZap1zPPpPaN2qRnLSw17cIa6/yS1nfQcD+HRq1jqL9dTEQH4ZywQKIJ8cLjXXXXp6emaNWvWWfu/+OIL/dd//ZclQQEAAD9FV513Lr74Yj377LNasGCBUlNTJUnLli3T4sWLNXr0aL3++uuuc4cPH25dpAAAAD7mdeL0zjvvKCYmRuvXr9f69etd+xs0aOCx5IrNZiNxAvzMslVtXdshcSdc25sd7oV0L2hQ6HFNTB13l1yXiO2u7VqKcm3XsXl2u3Vt5T5vzb5ST9gddP/Iqd3A82m72qXe1lmr1GLAJe7tkjDPP09LyuuSqxWAf8YCgYLpCLyzbdu2qogDAADA7zEBJgAAMC3Y16ozNTh8woQJOn78uKkGly9frq+++uq8ggIAAH6KweHntn79ejVr1kwDBw5U//791bVrV8XFxUmSTp06pfXr12vRokX64IMPtHv3br3//vtVGvS5vPnmm3rxxReVn5+vTp06adKkSbr88svLPf/TTz/Vk08+qe3bt6t169Z6/vnndf3111djxED1MMLca00a+eGu7ZN13fvzD4V5XDN5b5r7muKeru1rLt3o2u4SvcPjmtgw97goZ1ypGcJt7rZ/P7ShuL57O7Sg1P5S55W4Qz59nr3U+zhLjYsKvGETAAKEqYrT+++/r++//14nT57Uf//3fyshIUGhoaGKiopSWFiYOnfurHfffVdDhgzRxo0bdfXVV5+70Sry8ccfa9SoUcrMzNSaNWvUqVMn9enTR7/99luZ5y9ZskSDBg3S3XffrbVr12rAgAEaMGCA1q1bV82RAwAAf2czDMOrQpnT6dRPP/2kHTt26Pjx44qNjVVSUpJiY2OrKkavpKSk6LLLLtMbb7wh6XS8TZs21YMPPqgxY8acdf6tt96qo0ePavbs2a59V1xxhZKSkjRlypSzzi8oKFD9+vV1+PBhRUdHV92NAFUgceqLru2QY+6/m5ylKk6/L53b6rmfmDOK3ddUVHH65ah7cs056y92bcfOd1ecahV5vlFBc3fbHhWn+qW3Pa+p1cL9KF55FactA58UEGj88XfNmZiaPf+MQiLCz32BCc7jJ7Tz0Sf86j7PxevB4SEhIUpKSlJSUlIVhHN+iouLtXr1ao0dO9a1LyQkRL169dLSpUvLvGbp0qUaNWqUx74+ffro888/r/C9cnNzFRkZWeYxu90uu93uXfBAFWg58WWPr22x7iSoVqkuubq73T8Kiht4Jie1/+U+djLSfWz+JvciwSvrN/W4pkGEe6qD7YPd349XfOOOp96uIo9rnHXcP4gPuWdNUHGcO+Y6UZ4LA58sdsdmlEqcoqLdYzKbvz/B45rtQ87+AwrwBYfDIYfDUeaxwsLCMvf7A5ssHBxuTTPVqkY9Vbdv3z6VlJSoUaNGHvsbNWqkjRs3lnlNfn5+mefn5+eXef4ZaWlp5R7LzMxUVlaWuaABAEEpOztb48aN83UY3mMeJ1RGTk5OhRUnAAAqkpGRofT09DKPFRYWVvgHOnynRiVOsbGxqlWrlvbs2eOxf8+ePUpISCjzmoSEBK/OPyMpKSlg+mMRvH4dOdrj67ZPT3RtF8W6V8itu8s9i3fkTs82ona5F+YtjnKfV3DY3bV2LNbzSbzjpYZMtdg73rXtvMb9I6fu9giPa4oalnrir9RjK2H5pboRT3g+zxJS5P66dqlevCMXurfpmoO/qmhYR0FBQZn7/QKL/NYcoaGhSk5O1rx581z7nE6n5s2b51pX7/dSU1M9zpek7777rtzzAQAIakE+j5PXidNdd92lI0eOnLX/6NGjuuuuuywJ6nyMGjVKb7/9tqZPn64NGzbo/vvv19GjR3XnnXdKkoYMGeIxeHzEiBGaM2eOXn75ZW3cuFFZWVlatWqVhg0b5qtbAAAAfsrrrrrp06drwoQJioqK8th//Phxvf/++3r33XctC64ybr31Vu3du1dPPfWU8vPzlZSUpDlz5rgGgO/cuVMhIe58sVu3bvroo4/0xBNP6LHHHlPr1q31+eef69JLL/XVLQBV5kS8+wm1mJ9KLbJb6hGZooaegzXr/eb+OuSk+7zax9znRO70vKagnbsbMCzM/Z7hUe6n3Q45Pbu6baVmugw96I6tbr77Pev92/NvvdJP9hTVL7UYcKhn1yEA6wT7kiumE6eCggIZhiHDMHTkyBGFh7vHN5SUlOjrr79WfHx8BS1Un2HDhpVbMVqwYMFZ+wYOHKiBAwdWcVQAACDQmU6cGjRoIJvNJpvNpjZt2px13GazBeZjlQAAwLwgHxxuOnGaP3++DMPQNddco5kzZ6phw4auY6GhoUpMTFTjxo2rJEgAAOAnSJzMOTOfxLZt29SsWTPZWEUTCDghpZZMKT22oKSO+/s54jfPn2TFke5r6ua7pyYID3dfUxzl+fOgdoH7mpKG7u1jzlDXdlzTgx7XHDhcz7Vd5991Xdv19rinKahV5PS45lR46WVa3DGEHebnE4Cq4fVTdYmJiVq0aJH+/Oc/q1u3btq1a5ck6e9//7sWLVpkeYAAAMB/nBkcbtXrfL355ptq3ry5wsPDlZKSohUrVpx/oxXwOnGaOXOm+vTpo4iICK1Zs0ZFRafXmzp8+LDGjx9/jqsBAACs8fHHH2vUqFHKzMzUmjVr1KlTJ/Xp00e//fZblb2n19MRPPPMM5oyZYqGDBmiGTNmuPZ3795dzzzzjKXBAag6J0pNOxB+oPw/+w62dZ9X0Nz9mH/p6QhKfrdQurO2uz3nSffUAo3jD7m2E+p5zox89IS7G+94vLtLLnq7+/1Lv6ckhR06pbKEnKpRiyIA/sWP1qp75ZVXdM8997jmapwyZYq++uorvfvuuxozpmpWDfD6p8umTZt09dVXn7W/fv36OnTokBUxAQAAf1UFg8Nzc3MrXP+1rKVpiouLtXr1ao9JrUNCQtSrVy8tXbrUogDP5nXilJCQoK1bt6p58+Ye+xctWqSWLVtaFRcAAAgSFS1onJmZqaysrLP279u3TyUlJa4Jrs9o1KiRNm7caHWILl4nTvfcc49GjBihd999VzabTbt379bSpUv18MMP68knn6yKGAFYZNtw96K/7R93L/h7PM5dLi+92K4k1TrhPna8uXsl3Yht7q61kBKPSxR6yH3NqVPu7r3jMe4fOffaczyumRnW1bX97cFLXNtHLnS/T/3tv/szt9RqwBG/Fbm2l3zKwr5AVamKmcNzcnIqrDj5E68TpzFjxsjpdOraa6/VsWPHdPXVVyssLEwPP/ywHnzwwaqIEQAA1GBJSUmKjo4+94mlxMbGqlatWtqzZ4/H/j179ighIcHK8Dx4/VSdzWbT448/rgMHDmjdunVatmyZ9u7dq7/+9a9VER8AAPAnhsWvSgoNDVVycrLmzZvn2ud0OjVv3jylpqZWvuFzqPSjJ6Ghobr44otVUFCg77//Xm3btlX79u2tjA1AFTqW6H4iLeSE+28oZ13PfjdnRKmnXkpNoBlS6oG20gvxSpKznJ8sByJjXNuv1LvO49iEFp+5tn9tEeva3lpcukzv2XDCcvdjdkYIk14C1cLCrrrzHWQ+atQo3X777eratasuv/xyvfrqqzp69KjrKbuq4HXidMstt+jqq6/WsGHDdPz4cV122WXatm2bDMPQjBkzdPPNN1dFnAAAAB5uvfVW7d27V0899ZTy8/OVlJSkOXPmnDVg3Eped9UtXLhQV111lSRp1qxZcjqdOnTokF5//XXmcQIAoKbzk666M4YNG6YdO3aoqKhIy5cvV0pKyvk3WgGvE6fDhw+7FvidM2eObr75ZtWtW1c33HCDtmzZYnmAAAAA/sLrrrqmTZtq6dKlatiwoebMmeOaPfzgwYMKDw8/x9UA/MWOe//i2m7+9+dc2yEhnn8CGgfc0wnU+5f7b62Gm9yDnCJzd3tcc7KZe4zSsQT39UYdd9sdGnhe88SOAa7tllH7XNtbQ90l99/PUF667SWfPiwA1aAKJsAMJF4nTg899JBuu+02RUZGKjExUT169JB0uguvQ4cOVscHAAD8SFXM4xRITCVOBQUFrvkVHnjgAaWkpGjnzp3q3bu3QkJO/wXasmVLxjgBAIAazVTiFBMTI4fDofj4eF1zzTX67LPPlJyc7HHODTfcUCUB+qvS6+qUt44OECi2D3av9dT8rZc8jhkR7ukJQo+4H/m3OUst5HvosMc1J5Ibu7aj8o64tkOudE9w948Vl3lck9jSvZr5/PzWru2U9r+6tlceaeNxzZJn6J5DzeFwOORwOCRJhYWFPo4G5TE1ODwyMlL79++XJC1YsEAnT56s0qACQVpampKTk5WcnKzs7GxfhwMACHDZ2dmu3ysVrd0G3zJVcerVq5d69uzpmuDypptuUmhoaJnn/vDDD9ZF58dKr6tDtQkAcL4yMjKUnp4u6XTFyW+TJwaHn9sHH3yg6dOnKy8vTzk5ObrkkktUt27dqo7Nr1VmXR0gEGx/oPzurw4b3AsDl56p22bznLU74vMV7i+iotzbhnvx3kev/srjmiNO9yNz9Zsed23f17bUYsBVt4oC4HOlh30UFBT4OJryMTjchJMnT+q+++6TJK1atUrPP/+8GjRoUJVxAQAA+B1TY5xiYmL022+nB27+/i9LAAAQZPxk1nBfMFVxOjM4PD4+Xjk5OQwOB4LUzy+P9Pqavhfc69re9tDoUkdGn30yAPg5rweHG4bB4HAAAIIVg8PPjcHhAABAYnC4qcQpIiKCweEAACDoeb1W3fz58yVJ+/adXoQzNja2otMBBLk5+6f6OgQAVgryrjpTT9WdcejQIQ0dOlSxsbFq1KiRGjVqpNjYWA0bNkyHDh2qohABAIC/ONNVZ9Ur0JiuOB04cECpqanatWuXbrvtNtcs4uvXr9e0adM0b948LVmyRDExMVUWLAAAgC+ZTpyefvpphYaGKi8vT40aNTrr2HXXXaenn35aEydOLKcFAAAQ8OiqM+fzzz/XSy+9dFbSJEkJCQl64YUXNGvWLEuDAwAA8CemK04Oh0OXXHJJuccvvfRS5efnWxIUAADwU1SczImNjdX27dvLPb5t2zY1bNjQipgAAICfCvbB4aYTpz59+ujxxx9XcXHxWceKior05JNPqm/fvpYGBwAA4E+8GhzetWtXtW7dWkOHDlW7du1kGIY2bNigt956S0VFRfr73/9elbECAABfC/KuOtOJ04UXXqilS5fqgQce0NixY2UYp+/WZrOpd+/eeuONN9S0adMqCxQAAMDXvJo5vEWLFvrmm2908OBBbdmyRZLUqlUrxjYBABAsqDh5LyYmRpdffrnVsQAAAD8X7Iv8erXkCgAAQDCrVMUJAAAEqSDvqqPiBAAAYBIVJwAAYFqwj3Eicaqk3NxcRUZGSpLsdrvsdruPIwIABDKHwyGHwyFJKiws9HE0FaCrDpWRlpam5ORkJScnKzs729fhAAACXHZ2tuv3Slpamq/DQTmoOFVSTk6OR8UJAIDzkZGRofT0dEmnK05+mzwFecWJxKmSkpKSFB0d7eswAAA1ROlhHwUFBT6OBuUhcQIAAKbZ/vOyqq1AQ+IEAADMC/KuOgaHAwAAmETFCQAAmBbs8zhRcQIAADCJihMAADAvyMc4kTgBAADvBGDCYxW66gAAAEyi4gQAAExjcDgAAABMoeIEAADMY3A4AACAOXTVAQAAwBQqTgAAwDy66gAAAMyhqw4AAACmUHECAADmBXlXHRUnAAAAk6g4AQAA84K84kTiBAAATGNwOAAAAEyh4lRJubm5ioyMlCTZ7XbZ7XYfRwQACGQOh0MOh0OSVFhY6ONoKhDkXXVUnCopLS1NycnJSk5OVnZ2tq/DAQAEuOzsbNfvlbS0NF+Hg3JQcaqknJwcj4oTAADnIyMjQ+np6ZJOV5z8NXmyGYZshjWlIqvaqU4kTpWUlJSk6OhoX4cBAKghSg/7KCgo8HE0FaCrDgAAAGZQcQIAAKYxHQEAAABMoeIEAADMC/IxTiROAADANLrqAAAAYAoVJwAAYF6Qd9VRcQIAADXes88+q27duqlu3bpq0KBBpdshcQIAAKadGeNk1au6FBcXa+DAgbr//vvPqx266gAAgHkB2lU3btw4SdK0adPOqx0qTgAAACZRcQIAAF6xuostNzdXkZGRZR4rvYafPyBxAgAAPpWWllbusczMTGVlZZV5bMyYMXr++ecrbHvDhg1q167d+YTngcQJAACYZxinX1a1JSknJ6fCilN5Ro8erTvuuKPCt2jZsmWlwysLiRMAADCtKmYOT0pKUnR0tNfXx8XFKS4uzppgTCJxAgAANd7OnTt14MAB7dy5UyUlJcrNzZUktWrVqtxqV1lInAAAgHkBOh3BU089penTp7u+7ty5syRp/vz56tGjh+l2mI4AAADUeNOmTZNhGGe9vEmapABKnNLT09WsWTOFh4fLbrdr8ODB2r17t+v4iRMndMcdd6hDhw6qXbu2BgwYYKrd5s2by2azebwmTJhQRXcBAEBgszmtfQWagEmcevbsqU8++USbNm3SzJkzlZeXpz/+8Y+u4yUlJYqIiNDw4cPVq1cvr9p++umn5XA4XK8HH3zQ6vABAKgZDItfASZgxjiNHDnStZ2YmKgxY8ZowIABOnnypOrUqaN69epp8uTJkqTFixfr0KFDptuOiopSQkKC1SEDAIAaJmAqTqUdOHBAH374obp166Y6deqcd3sTJkzQBRdcoM6dO+vFF1/UqVOnLIgSAICaJ1AX+bVKwFScJOnRRx/VG2+8oWPHjumKK67Q7Nmzz7vN4cOHq0uXLmrYsKGWLFmisWPHyuFw6JVXXqnwukCaHh4A4H/ODA8pS2FhYTVHA7N8mjh5O1X6X/7yF919993asWOHxo0bpyFDhmj27Nmy2WyVjmHUqFGu7Y4dOyo0NFQZGRl67rnnFBYWVu51lZ0eHgAAScrOzta4ceN8HYb3qmDm8EDi08TJ26nSY2NjFRsbqzZt2qh9+/Zq2rSpli1bptTUVMtiSklJ0alTp7R9+3a1bdu23PMqOz08AACSlJGRofT09DKPFRYWVvgHui9VxczhgcSnidP5TJXudJ5+hrGoqMjKkJSbm6uQkBDFx8dXeF5lp4cHAECqeFhHQUFBNUcDswJijNPy5cu1cuVKXXnllYqJiVFeXp6efPJJXXTRRR7VpvXr16u4uFgHDhzQkSNHXNOpJyUlSZJWrFihIUOGaN68eWrSpImWLl2q5cuXq2fPnoqKitLSpUs1cuRI/fnPf1ZMTIwP7hQAAD8XoDOHWyUgEqe6devqs88+U2Zmpo4ePSq73a6+ffvqiSee8BiHdP3112vHjh2ur89Mp278pw/12LFj2rRpk06ePClJCgsL04wZM5SVlaWioiK1aNFCI0eO9Bj3BAAA3OiqCwAdOnTQDz/8cM7ztm/fXuHxHj16uJIoSerSpYuWLVt2vuEBAIAgERCJEwAA8BNB/lRdQE6ACQAA4AtUnAAAgGmMcQIAADAryJ+qo6sOAADAJCpOAADAtGDvqqPiBAAAYBIVJwAAYJ7TOP2yqq0AQ+IEAADMY3A4AAAAzKDiBAAATLPJwsHh1jRTrag4AQAAmETFCQAAmBfka9WROAEAANOYxwkAAACmUHECAADmMR0BAAAAzKDiBAAATLMZhmwWDeq2qp3qROIEAADMc/7nZVVbAYbEqZJyc3MVGRkpSbLb7bLb7T6OCAAQyBwOhxwOhySpsLDQx9GgPCROlZSWlubazszMVFZWlu+CAQAEvOzsbI0bN87XYZwTXXWolJycHI+KEwAA5yMjI0Pp6emSTlecSv+BDv9B4lRJSUlJio6O9nUYAIAaovSwj4KCAh9HU4Egn46AxAkAAJgX5EuuMI8TAACASVScAACAaaxVBwAAAFOoOAEAAPOCfIwTiRMAADDN5jz9sqqtQENXHQAAgElUnAAAgHl01QEAAJgU5BNg0lUHAABgEhUnAABgWrAv8kvFCQAAwCQqTgAAwDwGhwMAAJhkSLJq/qXAy5voqgMAADCLihMAADCNweEAAAAwhYoTAAAwz5CFg8OtaaY6kTgBAADzgvypOrrqAAAATKLiBAAAzHNKslnYVoAhcaqk3NxcRUZGSpLsdrvsdruPIwIABDKHwyGHwyFJKiws9HE0KA+JUyWlpaW5tjMzM5WVleW7YAAAAS87O1vjxo3zdRjnFOzTEZA4VVJOTo5HxQkAgPORkZGh9PR0SacrTqX/QPcrQT44nMSpkpKSkhQdHe3rMAAANUTpYR8FBQU+jgblIXECAADmBXnFiekIAAAATKLiBAAAzAvyihOJEwAAMC/I53Giqw4AAMAkKk4AAMC0YJ/HiYoTAACASVScAACAeUE+OJyKEwAAMM9pWPuqBtu3b9fdd9+tFi1aKCIiQhdddJEyMzNVXFzsdVtUnAAAQI22ceNGOZ1OZWdnq1WrVlq3bp3uueceHT16VC+99JJXbZE4AQAA8wKwq65v377q27ev6+uWLVtq06ZNmjx5MokTAAAILLm5uYqMjCzzWOk1/Kx0+PBhNWzY0OvrSJwAAIAXLKw46XQ7aWlp5Z6RmZmprKwsi97vtK1bt2rSpEleV5skEicAAOCNKuiqy8nJqbDiVJ4xY8bo+eefr/AtNmzYoHbt2rm+3rVrl/r27auBAwfqnnvu8TpkEicAAOBTSUlJio6O9vq60aNH64477qjwnJYtW7q2d+/erZ49e6pbt26aOnWq1+8nkTgBAABvOA2d6WKzpq3Ki4uLU1xcnKlzd+3apZ49eyo5OVnvvfeeQkIqNyMTiRMAADDPcJ5+WdVWNdi1a5d69OihxMREvfTSS9q7d6/rWEJCgldtkTgBAIAa7bvvvtPWrVu1detWXXjhhR7HDC/HazFzOAAAMO/M4HCrXtXgjjvukGEYZb68ReIEAABgEl11AADAPD8aHO4LJE4AAMC8AFxyxUokTpVUenr4qpoOHgAQPBwOhxwOhySpsLDQx9GgPIxxqqS0tDQlJycrOTlZ2dnZvg4HABDgsrOzXb9XKlqCxOcMWTg43Nc34z0qTpVUenp4qk0AgPOVkZGh9PR0SacrTn6dPAUxEqdKquz08AAAlKX0sI+CggIfR1MBxjgBAACY5HRKsmjGb2f1zBxuJcY4AQAAmETFCQAAmBfkXXVUnAAAAEyi4gQAAMwL8ooTiRMAADAvyJdcoasOAADAJCpOAADANMNwyjCsmUbAqnaqExUnAAAAk6g4AQAA8wzDurFJDA4HAAA1mmHh4PAATJzoqgMAADCJihMAADDP6ZRsFg3qZnA4AABAzUXFCQAAmMcYJ3gjPz/f47/wDw6HQ1lZWXI4HL4OBb/DZ+O/+Gz8lz//rjGcTktfgYbEyUv+/D9zMHM4HBo3bhy/APwQn43/4rPxX/yu8V901QEAAPPoqgscX331lVJSUhQREaGYmBgNGDDAdWz//v3q27evGjdurLCwMDVt2lTDhg1TQUFBhW0eOHBAt912m6Kjo9WgQQPdfffdKiwsrOI7AQAAgShgEqeZM2dq8ODBuvPOO/V///d/Wrx4sf77v//bdTwkJEQ33nijvvzyS23evFnTpk3T999/r/vuu6/Cdm+77Tb98ssv+u677zR79mwtXLhQ9957b1XfToWqa9xBTXuf6lDT/s34bPzzfWrS5yLVrH+zmvbZVIrTsPYVYAIicTp16pRGjBihF198Uffdd5/atGmjiy++WLfccovrnJiYGN1///3q2rWrEhMTde211+qBBx7Qjz/+WG67GzZs0Jw5c/S3v/1NKSkpuvLKKzVp0iTNmDFDu3fvro5bK1N1jTuoae9THWravxmfjX++T036XKSa9W9W0z6bSjGM0/MvWfIicaoSa9as0a5duxQSEqLOnTvLbrerX79+WrduXbnX7N69W5999pnS0tLKPWfp0qVq0KCBunbt6trXq1cvhYSEaPny5ZbeAwAACHwBMTj8119/lSRlZWXplVdeUfPmzfXyyy+rR48e2rx5sxo2bOg6d9CgQfriiy90/Phx9e/fX3/729/KbTc/P1/x8fEe+2rXrq2GDRuW+ySD8Z/sODc3t9x2ExISlJCQYPb2znJmjFVhYeE5x2idj5r0PjXpXmra+9Ske6mu96lJ91Jd7xOI95Kfn1/u75ozv2MMP6zIGE5Dhs2auPzx/s7FZvgw6jFjxuj555+v8JwNGzZozZo1uu2225Sdne0af1RUVKQLL7xQzzzzjDIyMlzn5+fn69ChQ9q8ebPGjh2rtLQ0vfXWW2W2PX78eE2fPl2bNm3y2B8fH69x48bp/vvvP+uaNWvWKDk52dtbBQDAa6tXr1aXLl18HYYkqaCgQPXr11fP2n9UbVsdS9o8ZZzU/FP/0OHDhxUdHW1Jm1XNpxWn0aNH64477qjwnJYtW7r6ki+++GLX/rCwMLVs2VI7d+70OP9Mtaddu3Zq2LChrrrqKj355JOy2+1ntZ2QkKDffvvNY9+pU6d04MCBcitGSUlJWr16tY4cOSKbzVbmOedbcQIA1HwVVZwMw1BUVJSSkpKqNygzDKek4F2rzqeJU1xcnOLi4s55XnJyssLCwrRp0yZdeeWVkqSTJ09q+/btSkxMLPc6539mJC0qKirzeGpqqg4dOqTVq1e7qkg//PCDnE6nUlJSyrwmJCTEb7J/AEDgio6OVps2bXwdhteCvasuIMY4RUdH67777lNmZqaaNm2qxMREvfjii5KkgQMHSpK+/vpr7dmzR5dddpkiIyP1yy+/6C9/+Yu6d++u5s2bS5JWrFihIUOGaN68eWrSpInat2+vvn376p577tGUKVN08uRJDRs2TH/605/UuHFjX90uAADwUwGROEnSiy++qNq1a2vw4ME6fvy4UlJS9MMPPygmJkaSFBERobffflsjR45UUVGRmjZtqj/84Q8aM2aMq41jx45p06ZNOnnypGvfhx9+qGHDhunaa69VSEiIbr75Zr3++uvVfn8AAASCU0aRZV1sp3Ty3Cf5GZ8ODgcAAIHhxIkTatGiheXr5yUkJGjbtm0KDw+3tN2qEhDzOFU3lnbxT+np6WrWrJnCw8Nlt9s1ePBgj4lKT5w4oTvuuEMdOnRQ7dq1PT63ijRv3lw2m83jNWHChCq6i5rpzTffVPPmzRUeHq6UlBStWLGiwvM//fRTtWvXTuHh4erQoYO+/vrraoq05po8ebI6duyo6OhoRUdHKzU1Vd98843r+NSpU9WjRw9FR0fLZrPp0KFD52wzKyvrrO+Ndu3aVeFd1Ey7du3Sn//8Z11wwQWKiIhQhw4dtGrVKtfxrKwstWvXTvXq1VNMTIx69eplai5Bb7/vzld4eLi2bdumw4cPW/oKpKRJInE6SzAt7RJoevbsqU8++USbNm3SzJkzlZeXpz/+8Y+u4yUlJYqIiNDw4cPVq1cvr9p++umn5XA4XK8HH3zQ6vBrrI8//lijRo1SZmam1qxZo06dOqlPnz5nPbF6xpIlSzRo0CDdfffdWrt2rQYMGKABAwZUOKEtzu3CCy/UhAkTtHr1aq1atUrXXHONbrzxRv3yyy+STg9V6Nu3rx577DGv2r3kkks8vjcWLVpUFeHXWAcPHlT37t1Vp04dffPNN1q/fr1efvll1zATSWrTpo3eeOMN/fzzz1q0aJGaN2+u6667Tnv37i23XW+/76wSHh7uSs6tegVS0iRJMuBy8uRJo0mTJsbf/vY3r6577bXXjAsvvLDc4+vXrzckGStXrnTt++abbwybzWbs2rWr0vEGuy+++MKw2WxGcXHxWcduv/1248YbbzTVTmJiojFx4kRrgwsil19+uTF06FDX1yUlJUbjxo2N5557rszzb7nlFuOGG27w2JeSkmJkZGRUaZzBKCYm5qyfZ/PnzzckGQcPHjzn9ZmZmUanTp2qJrgg8eijjxpXXnmlV9ccPnzYkGR8//335Z7j7fcdrEPFqRSWdgkcBw4c0Icffqhu3bqpTp3zn4htwoQJuuCCC9S5c2e9+OKLOnXqlAVR1nzFxcVavXq1R4UvJCREvXr10tKlS8u8ZunSpWdVBPv06VPu+fBeSUmJZsyYoaNHjyo1NfW82tqyZYsaN26sli1b6rbbbjtr7jxU7Msvv1TXrl01cOBAxcfHq3Pnznr77bfLPb+4uFhTp05V/fr11alTp3LP8fb7DtYhcSql9NIuTzzxhGbPnq2YmBj16NFDBw4c8Dh30KBBqlu3rpo0aaLo6GjLl3ZB2R599FHVq1dPF1xwgXbu3KkvvvjivNscPny4ZsyYofnz5ysjI0Pjx4/XI488YkG0Nd++fftUUlKiRo0aeexv1KhRuf9v5+fne3U+zPv5558VGRmpsLAw3XfffZo1a5bHxMHeSklJ0bRp0zRnzhxNnjxZ27Zt01VXXaUjR45YGHXN9uuvv2ry5Mlq3bq15s6dq/vvv1/Dhw/X9OnTPc6bPXu2IiMjFR4erokTJ+q7775TbGxsmW1W5vsO1gmKxGnMmDFnDXD8/Wvjxo2uCTMff/xx3XzzzUpOTtZ7770nm82mTz/91KPNiRMnas2aNfriiy+Ul5enUaNG+eLWAp7Zz+aMv/zlL1q7dq2+/fZb1apVS0OGDDnvCdRGjRqlHj16qGPHjrrvvvv08ssva9KkSeVOnAr4q7Zt2yo3N1fLly/X/fffr9tvv13r16+vdHv9+vXTwIED1bFjR/Xp00dff/21Dh06pE8++cTCqGs2p9OpLl26aPz48ercubPuvfde19yBpfXs2VO5ublasmSJ+vbtq1tuuaXKxyuhcgJmHqfzEYhLuwQLs5/NGbGxsYqNjVWbNm3Uvn17NW3aVMuWLTvv7ojSUlJSdOrUKW3fvl1t27a1rN2aKDY2VrVq1dKePXs89u/Zs6fc/7cTEhK8Oh/mhYaGqlWrVpJOr7iwcuVKvfbaa8rOzrak/QYNGqhNmzbaunWrJe0FA7vdflbVr3379po5c6bHvnr16qlVq1Zq1aqVrrjiCrVu3VrvvPOOxo4de1ablfm+g3WCInEKxKVdgoXZz6Ys5/p3r6zc3FyFhISc1b2Ks4WGhio5OVnz5s1zTf/gdDo1b948DRs2rMxrUlNTNW/ePD300EOufd99952lyS9Oczqdln5/FBYWKi8vT4MHD7aszZque/fuZy0kv3nz5gp/p0gVf3aV+b6DhXw9Ot3fjBgxwmjSpIkxd+5cY+PGjcbdd99txMfHGwcOHDAMwzC++uor49133zV+/vlnY9u2bcbs2bON9u3bG927d3e1sXz5cqNt27bGv//9b9e+vn37Gp07dzaWL19uLFq0yGjdurUxaNCgar+/QLVs2TJj0qRJxtq1a43t27cb8+bNM7p162ZcdNFFxokTJ1zn/fLLL8batWuN/v37Gz169DDWrl1rrF271nX895/NkiVLjIkTJxq5ublGXl6e8cEHHxhxcXHGkCFDqvsWA9aMGTOMsLAwY9q0acb69euNe++912jQoIGRn59vGIZhDB482BgzZozr/MWLFxu1a9c2XnrpJWPDhg1GZmamUadOHePnn3/21S3UCGPGjDFycnKMbdu2GT/99JMxZswYw2azGd9++61hGIbhcDiMtWvXGm+//bYhyVi4cKGxdu1aY//+/a42rrnmGmPSpEmur0ePHm0sWLDA2LZtm7F48WKjV69eRmxsrPHbb79V+/0FqhUrVhi1a9c2nn32WWPLli3Ghx9+aNStW9f44IMPDMMwjMLCQmPs2LHG0qVLje3btxurVq0y7rzzTiMsLMxYt26dq53ffzbn+r5D1SFx+p3i4mJj9OjRRnx8vBEVFWX06tXL43/eH374wUhNTTXq169vhIeHG61btzYeffRRj0d7zzzuu23bNte+/fv3G4MGDTIiIyON6Oho48477zSOHDlSjXcW2H766SejZ8+eRsOGDY2wsDCjefPmxn333eeRnBrG6akFJJ31OuP3n83q1auNlJQU1+fZvn17Y/z48R7JGM5t0qRJRrNmzYzQ0FDj8ssvN5YtW+Y6lpaWZtx+++0e53/yySdGmzZtjNDQUOOSSy4xvvrqq2qOuOa56667jMTERCM0NNSIi4szrr32WlfSZBinpxYo63vjvffec52TmJhoZGZmur6+9dZbDbvdboSGhhpNmjQxbr31VmPr1q3VeFc1wz//+U/j0ksvNcLCwox27doZU6dOdR07fvy4cdNNNxmNGzc2QkNDDbvdbqSnpxsrVqzwaOP3n41hVPx9h6rDkisAAAAmBcVTdQAAAFYgcQIAADCJxAkAAMAkEicAAACTSJwAAABMInECAAAwicQJAADAJBInoIY7duyYbr75ZkVHR8tms+nQoUNl7qtOgwcP1vjx4726xmaz6fPPP7cshh49engs+3LFFVectX4YAPweiRMQoP71r3/prrvuUuPGjRUaGqrExESNGDFC+/fv9zhv+vTp+vHHH7VkyRI5HA7Vr1+/zH3nY8GCBaYTsP/7v//T119/reHDh3v1Hg6HQ/369atkhOf2xBNPaMyYMa41EAGgLCROQAD69ddf1bVrV23ZskX/+7//q61bt2rKlCmaN2+eUlNTdeDAAde5eXl5at++vS699FIlJCTIZrOVua+6TJo0SQMHDlRkZKRX1yUkJCgsLKyKopL69eunI0eO6Jtvvqmy9wAQ+EicgAA0dOhQhYaG6ttvv1VaWpqaNWumfv366fvvv9euXbv0+OOPSzrdHfXyyy9r4cKFstls6tGjR5n7JOmtt95S69atFR4erkaNGumPf/yj6/2cTqeee+45tWjRQhEREerUqZP+8Y9/SJK2b9+unj17SpJiYmJks9l0xx13lBl3SUmJ/vGPf6h///4e+5s3b66//vWvGjRokOrVq6cmTZrozTff9DindFfd+++/r8jISG3ZssV1/IEHHlC7du107NgxSdK6devUr18/RUZGqlGjRho8eLD27dtX7r9prVq1dP3112vGjBnn+NcHENR8vVgeAO/s37/fsNlsxvjx48s8fs899xgxMTGG0+k09u/fb9xzzz1Gamqq4XA4jP3795e5b+XKlUatWrWMjz76yNi+fbuxZs0a47XXXnO1+cwzzxjt2rUz5syZY+Tl5RnvvfeeERYWZixYsMA4deqUMXPmTEOSsWnTJsPhcBiHDh0qM7Y1a9YYks5awT0xMdGIiooynnvuOWPTpk3G66+/btSqVctjkVpJxqxZs1xfDxw40LjsssuMkydPGrNnzzbq1KljrFq1yjAMwzh48KARFxdnjB071tiwYYOxZs0ao3fv3kbPnj1d16elpRkjRozwiGPy5MlGYmKimY8BQJCq7eO8DYCXtmzZIsMw1L59+zKPt2/fXgcPHtTevXsVHx+vunXrKjQ0VAkJCa5zfr9vwYIFqlevnv7rv/5LUVFRSkxMVOfOnSVJRUVFGj9+vL7//nulpqZKklq2bKlFixYpOztbaWlpatiwoSQpPj5eDRo0KDf2HTt2qFatWoqPjz/rWPfu3TVmzBhJUps2bbR48WJNnDhRvXv3LrOt7OxsdezYUcOHD9dnn32mrKwsJScnS5LeeOMNde7c2WMA+rvvvqumTZtq8+bNatOmTZltNm7cWP/617/kdDoVEkJBHsDZSJyAAGUYhmVt9e7dW4mJiWrZsqX69u2rvn376qabblLdunW1detWHTt27KwEpri42JVcmXX8+HGFhYWVOabqTFJW+utXX3213LZiYmL0zjvvqE+fPurWrZsr6ZJOD0CfP39+meOo8vLyyk2cIiIi5HQ6VVRUpIiICJN3BSCYkDgBAaZVq1ay2WzasGGDbrrpprOOb9iwQTExMYqLizPdZlRUlNasWaMFCxbo22+/1VNPPaWsrCytXLlShYWFkqSvvvpKTZo08bjO28HasbGxOnbsmIqLixUaGurVtWVZuHChatWqJYfDoaNHjyoqKkqSVFhYqP79++v5558/6xq73V5uewcOHFC9evVImgCUi1o0EGAuuOAC9e7dW2+99ZaOHz/ucSw/P18ffvihbr31Vq+flKtdu7Z69eqlF154QT/99JO2b9+uH374QRdffLHCwsK0c+dOtWrVyuPVtGlTSXIlQSUlJRW+R1JSkiRp/fr1Zx1btmzZWV+X1x0pSUuWLNHzzz+vf/7zn4qMjNSwYcNcx7p06aJffvlFzZs3PyvmevXqldvmunXrvK6iAQguJE5AAHrjjTdUVFSkPn36aOHChfrXv/6lOXPmqHfv3mrSpImeffZZr9qbPXu2Xn/9deXm5mrHjh16//335XQ61bZtW0VFRenhhx/WyJEjNX36dOXl5WnNmjWaNGmSpk+fLklKTEyUzWbT7NmztXfvXleV6vfi4uLUpUsXLVq06Kxjixcv1gsvvKDNmzfrzTff1KeffqoRI0aU2c6RI0c0ePBgDR8+XP369dOHH36ojz/+2PWk39ChQ3XgwAENGjRIK1euVF5enubOnas777yzwuTuxx9/1HXXXefVvx2A4ELiBASg1q1ba9WqVWrZsqVuueUWXXTRRbr33nvVs2dPLV261DVY26wGDRros88+0zXXXKP27dtrypQp+t///V9dcsklkqS//vWvevLJJ/Xcc8+pffv26tu3r7766iu1aNFCktSkSRONGzdOY8aMUaNGjTyqP7/3P//zP/rwww/P2j969GitWrVKnTt31jPPPKNXXnlFffr0KbONESNGqF69eq7B3x06dND48eOVkZGhXbt2qXHjxlq8eLFKSkp03XXXqUOHDnrooYfUoEGDcgd979q1S0uWLNGdd97p1b8dgOBiM6wcYQoA53D8+HG1bdtWH3/8sWtAePPmzfXQQw95LIFS3R599FEdPHhQU6dO9VkMAPwfg8MBVKuIiAi9//77FU5G6Qvx8fEaNWqUr8MA4OdInABUuzOzlfuT0aNH+zoEAAGArjoAAACTGBwOAABgEokTAACASSROAAAAJpE4AQAAmETiBAAAYBKJEwAAgEkkTgAAACaROAEAAJhE4gQAAGDS/wPgpoy//A+UOwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_scale(analysis.detection_products['normalized_detection_cube'][0], relative_to_center=True, figsize=(6, 6))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see the 51 Eri b signal is clearly detected as the only significant signal. :)\n", + "\n", + "If you want to know the contrast of the signal you can just go to the contrast map and read off the rough value from at the position of the planet to get a feeling for the results. The contrast map is the first entry of the \"detection\" output file, the second corresponding to the uncertainties. However, since they are not normalized, it's better to reconstruct the uncertainties from the contrast and normalized SNR map." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1, 3, 127, 127)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analysis.detection_cube.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_scale(analysis.detection_cube[0,0], relative_to_center=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Identifying and fitting potential candidates.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1/1 [00:00<00:00, 134.50it/s]\n", + "/home/samland/anaconda3/envs/trap_test/lib/python3.11/site-packages/astropy/units/quantity.py:673: RuntimeWarning: invalid value encountered in divide\n", + " result = super().__array_ufunc__(function, method, *arrays, **kwargs)\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "wavelengths = analysis.instrument.wavelengths[analysis.wavelength_indices]\n", + "candidate_threshold = 4.5\n", + "\n", + "analysis.detection_and_characterization(\n", + " data_full=data_full,\n", + " flux_psf_full=flux_psf_full,\n", + " pa=pa,\n", + " temporal_components_fraction=temporal_components_fraction,\n", + " inverse_variance_full=inverse_variance_full,\n", + " bad_frames=bad_frames,\n", + " amplitude_modulation_full=amplitude_modulation_full,\n", + " candidate_threshold=candidate_threshold,\n", + " detection_threshold=detection_threshold\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "analysis.validated_companion_table_short" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Further documentation on the usage of the `DetectionAnalysis`-class will be added soon." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pyproject.toml b/pyproject.toml index 2b0c665..82e110e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,85 @@ +[project] +name = "trap" +authors = [{name = "Matthias Samland", email = "m.samland@mailbox.org"}] +description = "Detection of exoplanets in direct imaging data by causal regression of temporal systematics" +readme = "README.rst" +license = { file = 'LICENSE' } +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Intended Audience :: Science/Research", +] +requires-python = ">=3.9" +dependencies = [ + "numpy", + "scipy", + "matplotlib", + "numba", + "pandas", + "scikit-learn", + "astropy", + "photutils", + "seaborn", + "tqdm", + "ray[default]", + "bottleneck", + "natsort", + "species" +] +dynamic = ['version'] + +[project.optional-dependencies] +docs = [ + "sphinx", + "sphinx-automodapi", + "numpydoc", +] +test = [ + "pytest", + "pytest-doctestplus", + "flake8", + "flake8-pyproject", + "codecov", + "pytest-cov", +] +all = [ + "ipython", + "notebook", + "ipywidgets" +] + +[project.urls] +"Bug Tracker" = "https://github.com/m-samland/trap/issues" +"Source Code" = "https://github.com/m-samland/trap" + + [build-system] -requires = ["setuptools>=42", "wheel", "cython"] +requires = [ + "setuptools>=60", + "setuptools_scm>=8.0", + "wheel", + "cython" +] build-backend = "setuptools.build_meta" + +[tool.setuptools_scm] +write_to = "src/trap/_version.py" + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.flake8] +max-line-length = 130 +exclude = [ + 'docs', + '.tox', + '.eggs', + 'build', + '*_version.py', +] + +[tool.coverage.run] +omit = [ + "_version.py", +] diff --git a/setup.py b/setup.py deleted file mode 100644 index 1b51bff..0000000 --- a/setup.py +++ /dev/null @@ -1,28 +0,0 @@ -import setuptools - -with open("README.rst", "r") as fh: - long_description = fh.read() - -setuptools.setup( - name="trap", - version="1.0.0", - author="Matthias Samland", - author_email="m.samland@mailbox.org", - description="Detection of exoplanets in direct imaging data by causal regression of temporal systematics", - long_description=long_description, - long_description_content_type="text/x-rst", - url="https://github.com/m-samland/trap", - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - "Intended Audience :: Science/Research", - ], - packages=setuptools.find_packages(), - package_data={"": ["test_data/*.fits"]}, - include_package_data=True, - python_requires='>=3.8', - install_requires=['numpy', 'scipy', 'matplotlib', 'numba', 'pandas', - 'scikit-learn', 'astropy', 'photutils', 'seaborn', 'tqdm', - 'ray', 'bottleneck', 'natsort', 'species'] -) diff --git a/src/trap/__init__.py b/src/trap/__init__.py new file mode 100644 index 0000000..208eecd --- /dev/null +++ b/src/trap/__init__.py @@ -0,0 +1,6 @@ +from . import _version + +try: + __version__ = _version.version +except Exception: + __version__ = "dev" \ No newline at end of file diff --git a/trap/detection.py b/src/trap/detection.py similarity index 99% rename from trap/detection.py rename to src/trap/detection.py index 4a8f4c4..13c7e85 100644 --- a/trap/detection.py +++ b/src/trap/detection.py @@ -579,7 +579,7 @@ def plot_contrast_curve( if set_xlim is not None: ax0.set_xlim(set_xlim) - + if set_ylim is not None: ax0.set_ylim(set_ylim) diff --git a/trap/embed_shell.py b/src/trap/embed_shell.py similarity index 100% rename from trap/embed_shell.py rename to src/trap/embed_shell.py diff --git a/trap/image_coordinates.py b/src/trap/image_coordinates.py similarity index 100% rename from trap/image_coordinates.py rename to src/trap/image_coordinates.py diff --git a/trap/likelihood_tools.py b/src/trap/likelihood_tools.py similarity index 100% rename from trap/likelihood_tools.py rename to src/trap/likelihood_tools.py diff --git a/trap/makesource.py b/src/trap/makesource.py similarity index 100% rename from trap/makesource.py rename to src/trap/makesource.py diff --git a/trap/parameters.py b/src/trap/parameters.py similarity index 100% rename from trap/parameters.py rename to src/trap/parameters.py diff --git a/trap/pca_regression.py b/src/trap/pca_regression.py similarity index 100% rename from trap/pca_regression.py rename to src/trap/pca_regression.py diff --git a/trap/plotting_tools.py b/src/trap/plotting_tools.py similarity index 100% rename from trap/plotting_tools.py rename to src/trap/plotting_tools.py diff --git a/trap/reduction_wrapper.py b/src/trap/reduction_wrapper.py similarity index 100% rename from trap/reduction_wrapper.py rename to src/trap/reduction_wrapper.py diff --git a/trap/regression.py b/src/trap/regression.py similarity index 100% rename from trap/regression.py rename to src/trap/regression.py diff --git a/trap/regressor_selection.py b/src/trap/regressor_selection.py similarity index 100% rename from trap/regressor_selection.py rename to src/trap/regressor_selection.py diff --git a/trap/template.py b/src/trap/template.py similarity index 100% rename from trap/template.py rename to src/trap/template.py diff --git a/trap/utils.py b/src/trap/utils.py similarity index 100% rename from trap/utils.py rename to src/trap/utils.py diff --git a/trap/__init__.py b/trap/__init__.py deleted file mode 100644 index 2825c7e..0000000 --- a/trap/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -* -""" -TRAP init file - -@author: samland -""" - -__version__ = "1.0.0" -__all__ = ['detection', 'image_coordinates', 'makesource', - 'parameters', 'pca_regression', 'plotting_tools', 'reduction_wrapper', - 'regression', 'template', 'regressor_selection'] - -from . import (detection, image_coordinates, makesource, - pca_regression, plotting_tools, reduction_wrapper, - template, regression, regressor_selection) -from .embed_shell import ipsh -from .utils import (crop_box_from_3D_cube, crop_box_from_4D_cube, - crop_box_from_image, derotate_cube, - determine_maximum_contrast_for_injection, prepare_psf, - resize_cube, resize_image_cube) diff --git a/tutorial.ipynb b/tutorial.ipynb deleted file mode 100644 index 0f950e5..0000000 --- a/tutorial.ipynb +++ /dev/null @@ -1,698 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# How to use TRAP for reducing direct imaging data: a simple example" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook shows how to apply the TRAP algorithm (Samland et al. 2020) to data that is shifted and pre-aligned with the center of the images. The data included in this package for testing and demonstration purposes is the same (cropped) VLT/SPHERE-IRDIS 51 Eridani b data in the K1 band that has been used in the paper describing the algorithm. This notebook can be used as reference for your own data and data reduction. Don't be scared by the text, this is mostly to provide additional information to, hopefully, mostly self-explanatory docstring and to describe the workflow and caveats. Running the reduction itself is very straightforward. Before going through this notebook, please make sure you installed the package formally using \"pip install .\" in the downloaded git folder, or using the \"-e\" option if you're going to change the code-base itself.\n", - "\n", - "Let us start by importing everything we need from generic packages used for data manipulation / plotting and some useful high-level functionality from TRAP. The \"pkg_resource\" package is only used for locating the test data included in this package. If you want to run and modify this notebook, please download it and put it somewhere where you keep your science stuff, you don't want to manipulate it in the git folder since that is messy. :)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import pkg_resources\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from astropy import units as u\n", - "from astropy.io import fits" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from trap.parameters import Instrument, Reduction_parameters\n", - "from trap.plotting_tools import plot_scale\n", - "from trap.reduction_wrapper import run_complete_reduction" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setting up the Instrument and Reduction parameters\n", - "\n", - "We need the pipeline to be aware of some attributes of the instrument we are using, like the pixel scale to translate coordinates and angular sizes, and the telescope diameter which is needed to compute the theoretical size of the point-spread function of the telescope. For this we create an Instrument-class object. Detector properties such as the read-noise and gain can be additionally specified if you want TRAP to take them into account when modeling the systematics. If you provide a variance data cube that already contains all the uncertainties of the input data later in, just leave them on their default value so that you do not take them into account twice. The example given below is for the test data packaged with the pipeline." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "used_instrument = Instrument(\n", - " name='IRDIS',\n", - " wavelengths=np.array([2.11]) * u.micron,\n", - " pixel_scale=u.pixel_scale(0.01225 * u.arcsec / u.pixel),\n", - " telescope_diameter=7.99 * u.m,\n", - " detector_gain=1.75,\n", - " readnoise=6)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next we need to specify the details of the reduction parameters, i.e. what type of TRAP reduction to we want to perform? What separation range do we want to look at? How should the training set (the reference pixels) be selected on which to train the systematics lightcurve model on? Everything related to the reduction in summarized in the \"Reduction_parameters\"-class. To be honest it is a bit unwieldy with a lot of things that can be tweak and including parameters for functions that are currently still in the testing and developing stage. In general however, the default values should be sensible for most applications and correspond mostly to the settings as shown in the paper. For now we will stick with the default parameters and only explicitly define some parameters that you are likely to play around with or *actually* need to change for your own reduction. We'll dump the results in our home directory for now, but of course you're free to change this!" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "result_folder = os.path.join(str(Path.home()), 'trap_test_reduction')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "reduction_parameters = Reduction_parameters(\n", - " search_region_inner_bound=1,\n", - " search_region_outer_bound=45,\n", - " right_handed=True,\n", - " include_noise=False,\n", - " yx_known_companion_position=[-35.95, -8.43],\n", - " known_companion_contrast=None,\n", - " use_multiprocess=False,\n", - " ncpus=2,\n", - " result_folder=result_folder,\n", - " # Reduction and signal masks\n", - " autosize_masks_in_lambda_over_d=True,\n", - " reduction_mask_size_in_lambda_over_d=1.1,\n", - " signal_mask_size_in_lambda_over_d=2.1,\n", - " reduction_mask_psf_size=19,\n", - " signal_mask_psf_size=19,\n", - " # Regressor stuff\n", - " annulus_width=5,\n", - " add_radial_regressors=True,\n", - " include_opposite_regressors=True,\n", - " # Contrast curve / normalization stuff\n", - " contrast_curve=True,\n", - " contrast_curve_sigma=5.,\n", - " normalization_width=3,\n", - " companion_mask_radius=11)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## To explain the above parameters in a bit more detail than what the docstrings say, they should be mostly self-explanatory, but still!\n", - "\n", - "- The first two \"search_region\"-parameters define the inner and outer separation for the final detection map that will be created, i.e. this is the separation range (in pixel) in which we will search for companions. As noted in the paper, TRAP can get quite slow if we choose a large outer bound, but in general we don't really care about large separations because TRAP, as a temporal model, is expected to perform better at small separations and loses its edge far out.\n", - "\n", - "- The \"right_handed\"-parameter gives the rotation direction of the field-of-view... Honestly, if you're working with a new instrument you just have to try it out, best with a data set where you know that there is a companion so you can check. It depends on the definition of parallactic angles used and exactly how the instrument is designed. For data produced by the SPHERE Data Center the parallactic angles work such, that \"right_handed\" is True, but for most other data I tried TRAP on it was the other way around.\n", - "\n", - "- Since TRAP creates a time-series model for a pixel and is trained by non-local pixels, it is important to excluded known companions from the training data. The \"yx_known_companion_position\" allows you to specifiy the relative position of a companion to be excluded from the regressor selection (otherwise, just set it to None or ignore it in the init). Usually you don't know beforehand whether there is a signiicant companion in the data, so you just ignore it in the first run and specifiy it in subsequent reductions for the same data based on the location of the companion in the detection map. Luckily, for the test data we know the location of 51 Eri b already. :)\n", - "\n", - "- You can run TRAP on multiple cores, specified by the \"use_multiprocessing\" and if True \"ncpus\" for the number of cores to be used. Running TRAP on multiple cores can significantly decrease the processing time. However, given how right now only a simple \"multiprocessing.pool\" implementation is used, it scales very poorly with memory use (i.e. every core has to have a copy of the whole data). If you run it on a laptop, I'd recommend playing around with small numbers first and monitor your memory usage before going all out. Since the data is cropped automatically to the \"search_region_outer_bound\" size (plus some extra space for regressor selection and such), memory usage goes down sharply with a smaller outer bound of the search area.\n", - "\n", - "- The \"result_folder\"-parameter specifies the path to the directory where you want to put the analysis results.\n", - "\n", - "- The next parameters specify the size of the PSF stamp to be used in the reduction. First, \"autosize_masks_in_lambda_over_d\" specifies whether you want to give the size in $\\lambda/D$. In this case the next two parameters count (2.1 corresponds roughly to the size of the PSF including the first Airy-ring). If not, you can give a fixed size in pixel using the next two parameters directly. As you can see there are two masks: the \"signal_mask\" and the \"reduction_mask\". The signal mask determines the size of the companion PSF that a companion affects with flux, this is important for removing pixels from the training data that could be contaminated by a planet at the point at which we currently search for a signal. The reduction mask determined the size of the PSF stamp used to determine which pixels to fit with a model given the assumed search position. The signal mask size should always be larger or equal to the reduction mask size. The reduction mask basically corresponds to $\\mathcal{P}_{\\mathcal{Y}}$ in Samland et al. 2020.\n", - "\n", - "- Next we have the parameters controlling what to include in the regressors: \"annulus_width\" is the width of the regressor annulus in pixel. If \"add_radial_regressors\" is True pixels radially inside and outside of reduction area will be added to pool of regressor pixels. \"include_opposite_regressors\" includes additional regressors corresponding to the reduction area, but mirrored at the origin (host star).\n", - "\n", - "- With the last four parameters above your control contrast curve creation and the empirical calibration of the uncertainties that is used in normalizing the SNR map. Switch on or off the automatic contrast curve creation at the end is mostly for people who work on a remote machine that has troubles plotting. Since making the contrast curve doesn't take any time at all and your computer doesn't have trouble plotting, just keep it on. The \"normalization_width\" is the width of the annulus used for normalizing the SNR map and \"companion_mask_size\" gives the radius of the mask (in pixel) used to mask out the companion in the normalization procedure and contrast curve statistics." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you want to learn more about the available options, although it can be a bit overwhelming, feel free to take a look at the docstrings!" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "Instrument?" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "Reduction_parameters?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Reading in the data and some additional information for the reduction\n", - "\n", - "Nooooow, we actually need some data! For this example we will use the SPHERE 51 Eri b data packaged in TRAP. We need:\n", - "\n", - "- The **data cube** containing the main science observation (usually coronagraphic, but of course it also works on non-coronagraphic sequences too). In the case of running the reduction pre-aligned data (such as in this example), the center is assumed to be centered on the pixel with the index (image_size_y // 2, image_size_x // 2), where \"//\" is the floor-operator in Python.\n", - "- An **unsaturated model of the PSF** used as forward model for the companion. It should be scaled to the same exposure time and filter (usually there is an neutral density filter) as the science observation.\n", - "- A list containing the **parallactic angles for each frame**\n", - "- An astropy quantity array containing the **wavelengths of each channel**.\n", - "\n", - "Optionally:\n", - "- A cube of the same dimension as the science data, containing the **inverse variance for each data point**. If you have this information it is recommended to include it in the fit, as it automatically puts less weight on bad data. If \"include_noise\" is True, the pipeline will first check if a variance cube is provide, otherwise it will assume the data only contains photon noise and the read noise specified in the Instrument-object. This is of course not entirely true if for example your pre-reduction of the data already removed a significant sky background or rescaled the amplitude of the data, so beware of these effects.\n", - "- A list containing **indices of bad frames**. TRAP is very robust against anomalous frames compared to traditional spatial models, so unless some data seems completely un-usable I wouldn't recommend removing data aggresively or even at all)\n", - "- An array of **companion flux amplitude modulation factors** (centered around 1). The first axis should be wavelength, the second time. You can account for flux variation in the companion model by, for example, taking into account the frame-to-frame change in satellite spot brightness. The companion signal will be multiplied by this factor in the forward model." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If the paths of the demo data is not recognized properly on your installation, you can simply change the folder by hand to the directory of the package (or download it separately somewhere else)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "data_full = fits.getdata(\n", - " pkg_resources.resource_filename('trap', 'test_data/science_cube.fits'))\n", - "flux_psf_full = fits.getdata(\n", - " pkg_resources.resource_filename('trap', 'test_data/psf_model.fits'))\n", - "pa = fits.getdata(\n", - " pkg_resources.resource_filename('trap', 'test_data/parallactic_angles.fits'))\n", - "\n", - "inverse_variance_full = None\n", - "bad_frames = None\n", - "amplitude_modulation_full = None" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The data includes a wavelength dimension (axis=0), but we included only the K1 wavelength in the test data.\n", - "Let's have a quick peak at the first frame of the (only wavelength). The \"plot_scale\" routine automatically plots the zscale image with colorbar." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plot_scale(data_full[0, 0], relative_to_center=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And that's it! For a basic reduction with an already pre-aligned/centered cube this is all that is needed." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setting up the reduction\n", - "\n", - "The heavy lifting is already done, we now just have two more high-level parameter we can set." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "wavelength_indices = [0]\n", - "temporal_components_fraction = [0.2]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you provided a cube with the first axis being wavelength (for example when using an IFS or dual-band imager), you can explicitly specify which wavelength indices you want to reduce. Chosing None or not setting it explicitly a reduction of all wavelengths will be performed.\n", - "\n", - "The \"temporal_components_fraction\"-parameter described how many principal components (compared to be maximum available number, i.e. the number of frames in the sequences) you want to use. If more than one entry is provided in the list it will loop over the different options and provide output for all of them." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Starting the reduction\n", - "\n", - "Running the reduction on one core in the 1 - 45 pixel separation range can take about an hour (with the above parameters). Best time to make coffee or go for a long walk! Or run it one a bigger machine. ;)\n", - "\n", - "If you don't want to wait for an hour you can skip further down this notebook, where I show a small targeted reduction that may still be useful in some cases." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "# all_results = run_complete_reduction(\n", - "# data_full=data_full,\n", - "# flux_psf_full=flux_psf_full,\n", - "# pa=pa,\n", - "# instrument=used_instrument,\n", - "# reduction_parameters=reduction_parameters,\n", - "# temporal_components_fraction=temporal_components_fraction,\n", - "# wavelength_indices=wavelength_indices,\n", - "# inverse_variance_full=inverse_variance_full,\n", - "# bad_frames=bad_frames,\n", - "# amplitude_modulation_full=amplitude_modulation_full)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The (non-normalized) contrast images, as well as the instrument and reduction parameters will be saved in the \"result_folder\", and are ready to be read into the detection and analysis module." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Normalization, contrast curves, and detection maps\n", - "\n", - "The detection module takes care of everything else that acts on the basic output of TRAP, such as normalizing the detection map and contrast curves, extracting signals and perform spectral template matching on multi-wavelength data (work in progress). Let us first create the object that will encapsulate the analysis for us (for one specific number of principle components used)." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from trap.detection import DetectionAnalysis\n", - "\n", - "component_fraction = temporal_components_fraction[0]\n", - "analysis = DetectionAnalysis()\n", - "analysis.read_output(\n", - " component_fraction,\n", - " result_folder=reduction_parameters.result_folder,\n", - " reduction_type='temporal',\n", - " read_parameters=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For now let us perform a normalization of the SNR map (as described in Samland et al. 2021). Masking all pixels above 5-sigma to avoid contamination by very bright sources. This routine will also routine the contrast curves for us. Unless `inplace` is set to False, the output will be put directly into the analysis object as a directionary called `detection_products`." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "detection_threshold = 5.\n", - "analysis.contrast_table_and_normalization(\n", - " save=False,\n", - " mask_above_sigma=detection_threshold)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['normalized_detection_cube', 'uncertainty_cube', 'median_uncertainty_cube', 'contrast_tables', 'contrast_table'])" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analysis.detection_products.keys()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `detection_products` contains the `normalized_detection_cube`, which contains the normalized detection map for each wavelength reduced (in this case the length is 1)." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plot_scale(analysis.detection_products['normalized_detection_cube'][0], relative_to_center=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As you can see the 51 Eri b signal is clearly detected as the only significant signal. :)\n", - "\n", - "If you want to know the contrast of the signal you can just go to the contrast map and read off the rough value from at the position of the planet to get a feeling for the results. The contrast map is the first entry of the \"detection\" output file, the second corresponding to the uncertainties. However, since they are not normalized, it's better to reconstruct the uncertainties from the contrast and normalized SNR map." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1, 3, 127, 127)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analysis.detection_cube.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plot_scale(analysis.detection_cube[0,0], relative_to_center=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "analysis.instrument.readnoise = 6" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Identifying and fitting potential candidates.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|███████████████████████████████████████| 1/1 [00:00<00:00, 202.81it/s]\n", - "100%|████████████████████████████████████████| 1/1 [00:00<00:00, 2.96it/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Extracting candidate spectra.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\r", - "0it [00:00, ?it/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adjusting outer bound to fit guess position\n", - "Auto crop size cropped data to: 127\n", - "Number of principal comp. used: 51 of 256\n", - "Lambda index: 0 Wavelength: 2.110 micron\n", - "lam00_ncomp051_frac0.20\n", - "PSF Size: 11\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "1it [00:00, 2.32it/s]\n", - "/home/samland/anaconda3/envs/sci/lib/python3.8/site-packages/astropy/units/quantity.py:614: RuntimeWarning: invalid value encountered in true_divide\n", - " result = super().__array_ufunc__(function, method, *arrays, **kwargs)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "wavelengths = analysis.instrument.wavelengths[analysis.wavelength_indices]\n", - "candidate_threshold = 4.5\n", - "\n", - "analysis.detection_and_characterization(\n", - " data_full=data_full,\n", - " flux_psf_full=flux_psf_full,\n", - " pa=pa,\n", - " temporal_components_fraction=temporal_components_fraction,\n", - " inverse_variance_full=inverse_variance_full,\n", - " bad_frames=bad_frames,\n", - " amplitude_modulation_full=amplitude_modulation_full,\n", - " candidate_threshold=candidate_threshold,\n", - " detection_threshold=detection_threshold\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
candidate_idxyx_relativey_relativeseparationseparation_sigmaposition_angleposition_angle_sigmanorm_snr_fit_freepeak_pixel_snrwavelength_indexwavelengthcontrastuncertainty
0054.58305626.80994-8.416944-36.1900637.15596NaN166.907129NaN9.9344289.09037102.110.0000066.649842e-07
\n", - "
" - ], - "text/plain": [ - " candidate_id x y x_relative y_relative separation \\\n", - "0 0 54.583056 26.80994 -8.416944 -36.19006 37.15596 \n", - "\n", - " separation_sigma position_angle position_angle_sigma norm_snr_fit_free \\\n", - "0 NaN 166.907129 NaN 9.934428 \n", - "\n", - " peak_pixel_snr wavelength_index wavelength contrast uncertainty \n", - "0 9.090371 0 2.11 0.000006 6.649842e-07 " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "analysis.validated_companion_table_short" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Further documentation on the usage of the `DetectionAnalysis`-class will be added soon." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -}