jason-neal/eniric

View on GitHub
docs/Notebooks/Precision_example.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example how to calculate the RV precision"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Simple example of how to calculate precision, No convolution or SNR scaling is preformed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from eniric import config, precision"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "..\\..\\data\\test_data\\phoenix-raw\n",
      "1569128\n"
     ]
    }
   ],
   "source": [
    "# Load a spectrum\n",
    "from astropy.io import fits\n",
    "\n",
    "test_data = config.paths[\"phoenix_raw\"]\n",
    "print(test_data)\n",
    "\n",
    "wav = fits.getdata(os.path.join(test_data, \"WAVE_PHOENIX-ACES-AGSS-COND-2011.fits\"))\n",
    "flux = fits.getdata(\n",
    "    os.path.join(\n",
    "        test_data, \"Z-0.0\", \"lte03900-4.50-0.0.PHOENIX-ACES-AGSS-COND-2011-HiRes.fits\"\n",
    "    )\n",
    ")\n",
    "# This is a bit long\n",
    "print(len(flux))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10001\n"
     ]
    }
   ],
   "source": [
    "# Take a section of wavelength\n",
    "xmin = 2000  # nm\n",
    "xmax = 3000  # nm\n",
    "mask = (wav >= xmin) & (wav <= xmax)\n",
    "wav = wav[mask]\n",
    "flux = flux[mask]\n",
    "\n",
    "print(len(flux))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RV precision between 2000-3000nm = 0.000416 m / s\n"
     ]
    }
   ],
   "source": [
    "# Calculate precision with no masking and without scaling\n",
    "rv_precision = precision.rv_precision(wavelength=wav, flux=flux)\n",
    "\n",
    "print(f\"RV precision between {xmin}-{xmax}nm = {rv_precision:1.6f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This precision has not been scaled to a specific flux/SNR level."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Spectral quality between 2000-3000nm = 21490.5\n"
     ]
    }
   ],
   "source": [
    "# Calculate spectral quality also with no masking and without scaling\n",
    "quality = precision.quality(wavelength=wav, flux=flux)\n",
    "\n",
    "print(f\"Spectral quality between {xmin}-{xmax}nm = {quality:7.1f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Scaling Effects\n",
    "Scaling the flux of the spectrum affects the RV precision, Need to scale to known SNR level for relative comparisions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# The precision needs to be scaled to the relative SNR.\n",
    "# 1/1e6 scales the test data flux to give sensible numbers here.\n",
    "scales = [0.1, 0.2, 0.5, 2, 5, 10]\n",
    "prec = [\n",
    "    precision.rv_precision(wavelength=wav, flux=flux / 1e6 * scale).value\n",
    "    for scale in scales\n",
    "]\n",
    "\n",
    "plt.plot(scales, prec)\n",
    "plt.xlabel(\"Flux scale\")\n",
    "plt.ylabel(\"Precision (m/s)\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}