{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Usage"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "remove-cell"
    ]
   },
   "source": [
    "To install the [expertsystem](expertsystem) in Google Colab, **uncomment** the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "jupyter": {
     "source_hidden": true
    },
    "tags": [
     "remove-cell"
    ]
   },
   "outputs": [],
   "source": [
    "# !pip install expertsystem[doc]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Main interface"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The [expertsystem](expertsystem) consists of three main components: [particle](expertsystem.particle), [reaction](expertsystem.reaction), and [amplitude](expertsystem.amplitude) that build on each other. Here's a small example of how to use them!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import expertsystem as es\n",
    "\n",
    "pdg = es.io.load_pdg()\n",
    "pdg.filter(lambda p: p.spin == 2 and p.charmness).names"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = es.reaction.generate(\n",
    "    initial_state=\"J/psi(1S)\",\n",
    "    final_state=[\"K0\", \"Sigma+\", \"p~\"],\n",
    "    allowed_interaction_types=\"strong\",\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import graphviz\n",
    "\n",
    "graphs = result.collapse_graphs()\n",
    "dot = es.io.convert_to_dot(graphs)\n",
    "graphviz.Source(dot)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The [io](expertsystem.io) module offers functionality for reading and writing. This is useful if when you've [generated](expertsystem.amplitude.generate) an [AmplitudeModel](expertsystem.amplitude.model.AmplitudeModel) and want to use it in an external {doc}`PWA package <pwa:software>`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "amplitude_model = es.amplitude.generate(result)\n",
    "es.io.write(amplitude_model, \"jpsi_to_gamma_eta_eta.yml\")\n",
    "len(amplitude_model.parameters)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Advanced"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each of the [expertsystem](expertsystem)'s sub-modules offer functionality to handle more advanced reaction types. The following notebooks illustrate how use them."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```{toctree}\n",
    "---\n",
    "maxdepth: 2\n",
    "---\n",
    "usage/workflow\n",
    "usage/particles\n",
    "usage/visualization\n",
    "```"
   ]
  }
 ],
 "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.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}