Files
pg-rad/demo/demo.ipynb
2026-01-27 20:40:50 +01:00

186 lines
10 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "5e30f59a",
"metadata": {},
"source": [
"# Demo of PG-RAD\n",
"\n",
"This is a demo."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "415fdd25",
"metadata": {},
"outputs": [
{
"ename": "RuntimeError",
"evalue": "super(): no arguments",
"output_type": "error",
"traceback": [
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
"\u001b[31mRuntimeError\u001b[39m Traceback (most recent call last)",
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m 3\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mdataloader\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m load_data\n\u001b[32m 4\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mpath\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m path_from_RT90\n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mlandscape\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Landscape\n\u001b[32m 6\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mobjects\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Source\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01misotopes\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Cs137\n",
"\u001b[36mFile \u001b[39m\u001b[32m~/pg-rad/src/pg_rad/landscape.py:6\u001b[39m\n\u001b[32m 3\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnumpy\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mas\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mnp\u001b[39;00m\n\u001b[32m 5\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mpath\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Path\n\u001b[32m----> \u001b[39m\u001b[32m6\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01mobjects\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Source\n\u001b[32m 8\u001b[39m \u001b[38;5;28;01mclass\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mLandscape\u001b[39;00m:\n\u001b[32m 9\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, size: \u001b[38;5;28mint\u001b[39m | \u001b[38;5;28mtuple\u001b[39m[\u001b[38;5;28mint\u001b[39m, \u001b[38;5;28mint\u001b[39m, \u001b[38;5;28mint\u001b[39m] = \u001b[32m500\u001b[39m, unit = \u001b[33m'\u001b[39m\u001b[33mmeters\u001b[39m\u001b[33m'\u001b[39m):\n",
"\u001b[36mFile \u001b[39m\u001b[32m~/pg-rad/src/pg_rad/objects.py:4\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mmath\u001b[39;00m\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mtyping\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Self\n\u001b[32m----> \u001b[39m\u001b[32m4\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mpg_rad\u001b[39;00m\u001b[34;01m.\u001b[39;00m\u001b[34;01misotopes\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Isotope\n\u001b[32m 6\u001b[39m \u001b[38;5;28;01mclass\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mObject\u001b[39;00m:\n\u001b[32m 7\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34m__init__\u001b[39m(\n\u001b[32m 8\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m 9\u001b[39m x: \u001b[38;5;28mfloat\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 12\u001b[39m name: \u001b[38;5;28mstr\u001b[39m = \u001b[33m\"\u001b[39m\u001b[33mUnnamed object\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 13\u001b[39m color: \u001b[38;5;28mstr\u001b[39m = \u001b[33m'\u001b[39m\u001b[33mgrey\u001b[39m\u001b[33m'\u001b[39m):\n",
"\u001b[36mFile \u001b[39m\u001b[32m~/pg-rad/src/pg_rad/isotopes.py:29\u001b[39m\n\u001b[32m 26\u001b[39m \u001b[38;5;28mself\u001b[39m.E = E\n\u001b[32m 27\u001b[39m \u001b[38;5;28mself\u001b[39m.b = b\n\u001b[32m---> \u001b[39m\u001b[32m29\u001b[39m \u001b[38;5;28;43;01mclass\u001b[39;49;00m\u001b[38;5;250;43m \u001b[39;49m\u001b[34;43;01mCs137\u001b[39;49;00m\u001b[43m(\u001b[49m\u001b[43mIsotope\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[32m 30\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m.\u001b[49m\u001b[34;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[32m 31\u001b[39m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mCaesium-137\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 32\u001b[39m \u001b[43m \u001b[49m\u001b[43msymbol\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mCs137\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 33\u001b[39m \u001b[43m \u001b[49m\u001b[43mE\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m662.66\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 34\u001b[39m \u001b[43m \u001b[49m\u001b[43mb\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m0.851\u001b[39;49m\u001b[43m)\u001b[49m\n",
"\u001b[36mFile \u001b[39m\u001b[32m~/pg-rad/src/pg_rad/isotopes.py:30\u001b[39m, in \u001b[36mCs137\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m 29\u001b[39m \u001b[38;5;28;01mclass\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01mCs137\u001b[39;00m(Isotope):\n\u001b[32m---> \u001b[39m\u001b[32m30\u001b[39m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m.\u001b[34m__init__\u001b[39m(\n\u001b[32m 31\u001b[39m name = \u001b[33m\"\u001b[39m\u001b[33mCaesium-137\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 32\u001b[39m symbol = \u001b[33m\"\u001b[39m\u001b[33mCs137\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m 33\u001b[39m E = \u001b[32m662.66\u001b[39m,\n\u001b[32m 34\u001b[39m b = \u001b[32m0.851\u001b[39m)\n",
"\u001b[31mRuntimeError\u001b[39m: super(): no arguments"
]
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"\n",
"from pg_rad.dataloader import load_data\n",
"from pg_rad.path import path_from_RT90\n",
"from pg_rad.landscape import Landscape\n",
"from pg_rad.objects import Source\n",
"\n",
"from pg_rad.isotopes import Isotope"
]
},
{
"cell_type": "markdown",
"id": "8431d39b",
"metadata": {},
"source": [
"## Loading a file"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5a0e470a",
"metadata": {},
"outputs": [],
"source": [
"FILENAME = \"B10_NaIR_MGS_ROI_CPS_IPL.CSV\"\n",
"df = load_data(FILENAME)"
]
},
{
"cell_type": "markdown",
"id": "baa7aba8",
"metadata": {},
"source": [
"## Demo: Path regression"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2ec97553",
"metadata": {},
"outputs": [],
"source": [
"p1 = path_from_RT90(df, east_col = \"East\", north_col = \"North\", simplify_path = False)\n",
"p2 = path_from_RT90(df, east_col = \"East\", north_col = \"North\", simplify_path = True)\n",
"\n",
"p1.plot(color='r', linestyle='-', linewidth = 10, label = \"Full path\")\n",
"p2.plot(color='b', linestyle='-', marker = 'o', label = \"Reduced path\")\n",
"\n",
"plt.xlabel(\"X [m]\")\n",
"plt.ylabel(\"Y [m]\")\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "da8620fa",
"metadata": {},
"source": [
"## Making a landscape\n",
"\n",
"You can make a landscape with or without a path. Let's make an empty landscape."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "24f1159d",
"metadata": {},
"outputs": [],
"source": [
"landscape = Landscape()\n",
"fig, ax = landscape.plot()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "035b4f42",
"metadata": {},
"source": [
"## Adding a source"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "91019da5",
"metadata": {},
"outputs": [],
"source": [
"cs137 = Isotope(name = \"Cs137\", E = 662.66, b = 0.851)\n",
"my_source = Source(x = 100, y = 100, z = 0, activity = 100, isotope = cs137)\n",
"landscape.add_sources(my_source)\n",
"\n",
"landscape.sources"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7913fe1e",
"metadata": {},
"outputs": [],
"source": [
"landscape.plot()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "df4715c1",
"metadata": {},
"outputs": [],
"source": [
"landscape.set_path(p2)\n",
"landscape.plot()"
]
},
{
"cell_type": "markdown",
"id": "17fec32f",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.12.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}