{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Database examples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Premise\n", "\n", "Let's assume we want to upload a newly created isotherm in the internal\n", "database. This isotherm is measured on the novel adsorbent *Carbon X1*, with\n", "nitrogen at 77 K." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports\n", "\n", "First we need to do the required imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pygaps\n", "import pygaps.parsing as pgp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Upload\n", "\n", "We happen to have the isotherm conveniently stored as a json file, so we load it\n", "into memory and inspect it." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material: Carbon X1\n", "Adsorbate: nitrogen\n", "Temperature: 77.355K\n", "Units: \n", "\tUptake in: mmol/g\n", "\tPressure in: bar\n", "Other properties: \n", "\tmaterial_batch: X1\n", "\tiso_type: physisorption\n", "\tuser: PI\n", "\tinstrument: homemade1\n", "\tactivation_temperature: 150.0\n", "\tlab: local\n", "\ttreatment: acid activated\n", "\n" ] }, { "data": { "text/html": [ "
<AxesSubplot:xlabel='Pressure [$bar$]', ylabel='Loading [$mmol\\\\/g^{-1}$]'>\n", "\n" ], "text/plain": [ "\u001b[1m<\u001b[0m\u001b[1;95mAxesSubplot:\u001b[0m\u001b[1;33mxlabel\u001b[0m\u001b[39m=\u001b[0m\u001b[32m'Pressure \u001b[0m\u001b[32m[\u001b[0m\u001b[32m$bar$\u001b[0m\u001b[32m]\u001b[0m\u001b[32m'\u001b[0m\u001b[39m, \u001b[0m\u001b[33mylabel\u001b[0m\u001b[39m=\u001b[0m\u001b[32m'Loading \u001b[0m\u001b[32m[\u001b[0m\u001b[32m$mmol\\\\/g^\u001b[0m\u001b[32m{\u001b[0m\u001b[32m-1\u001b[0m\u001b[32m}\u001b[0m\u001b[32m$\u001b[0m\u001b[32m]\u001b[0m\u001b[32m'\u001b[0m\u001b[1m>\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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79/qQVXS4LRU0rp1onGDZMyMxg2SSevWicFpqdVy/j59+rBixQq2bt1abt/MmTP517/+xYwZM1i4cCFjxowhN7d0z62iYRfnHGZW/L0iKSkpAMTHxwPhn2lt2rSJm2++mQ8++IB+/fpx3333VXjeUDIzMzn88MNp3LgxxxxzDFlZWXz88ce0a9eOZs2aMXDgQF588UVef/111q5dW2HiwPr16/nyyy/L9QjDba/IZZddxueff87mzZsBaNeuHQDJycnceOONfP3118XHVrSvrDvuuIMrrriCk046iV9++WWf7ajo91XR34nAPaHyQv3OK/N3Requ3p070CildM+7UUoSvTp3iGo7FKAqKT4+jo/G38l/7rmJB6/8Hf+556ZqHY/t0qUL55xzDtdddx07d+4EwOfz8dRTT7Ft2zaaNWtGy5YtycvL46WXXtrn+SZMmAAEnm0tWLCAtLQ0+vfvz4IFC1i6dCkQSAzo3bt38TOvqrjxxhu59tprSU1N5amnnuLNN98sldVXGSWH8syMc845h3vvvbfcUNwHH3xAt27dKgzCL7/8MmeddRYtW7as1PaSdu3axdq1a4tfT5s2jRYtWtCiRQt2797N9u3bgcCNf+LEifTq1Qugwn3hjBo1issvv7xSQaqi31dFfyf69+9PRkYGK1asAOCFF16o8HNCOe6445g3bx4rV64EAtdR6o+i/5AnBO9v1f0f8kqLtOtVW76qa4gvGvLy8txdd93lunTp4rp37+66devmbr31Vpefn+8uuugi16VLF3fyySe722+/3Z144onF76PM0AvgHnvsMTdgwADXtWtX9/bbbxfvmz59uuvdu7fr2bOnO+WUU9yKFSsqPE+oIZ233nrLpaamuvz8/OJt7733nuvRo4fLy8tzf/rTn1zbtm1dfHy8O/DAA91RRx0V8ue95ppr3Pjx44tff/bZZw5wY8eOLd42YcIEd9999+3z2nXp0sVNnz690tsHDx7svvvuO+ecc7/++qtLS0tzPXr0cKmpqe7kk0928+bNc845t2rVKterVy/Xs2dPd9RRR7kLLrigeIiuon1llR3uHDNmjOvatatbt25duWNLXvdwv6+CgoIK/05MnjzZHXHEEa5///7uiSeeqHCIL9zv/L///a/r2rWrGzBggBs7dqxLTEx0Pp8v5M8ndU9hoc/1vHKka3/RzW7a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" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pathlib import Path\n", "\n", "json_path = Path.cwd() / 'data' / 'carbon_x1_n2.json'\n", "with open(json_path) as text_file:\n", " isotherm = pgp.isotherm_from_json(text_file.read())\n", "\n", "isotherm.print_info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can do the database upload." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material uploaded: 'Carbon X1'\n", "Isotherm uploaded: '29c44c6f12c0f4735b6de977bdcef5c5'\n" ] } ], "source": [ "isotherm.to_db()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The output points out that two things happened:\n", "\n", "- The isotherm material was first uploaded, using the `material.name` as a database ID.\n", "- Then the isotherm itself was uploaded, using its `isotherm.iso_id` as the unique ID.\n", "\n", "The adsorbate (`nitrogen`) is already in the database, so it does need to be stored.\n", "\n", "Now if we try to run the upload again we get an error." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Error inserting isotherm \"29c44c6f12c0f4735b6de977bdcef5c5\" base properties. Ensure material \"Carbon X1\", and adsorbate \"nitrogen\" exist in the database. Original error:\n", " UNIQUE constraint failed: isotherms.id\n" ] } ], "source": [ "try:\n", " isotherm.to_db()\n", "except Exception as e: \n", " print(e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There was a `FOREIGN KEY` error: this isotherm is already in the database!\n", "\n", "To retrieve the newly uploaded isotherm we can use the `isotherms_from_db()`\n", "function. By default, it gets all existing isotherms, although it can be\n", "configured to only return those matching a filter." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Selected 1 isotherms\n", "Selected 0 isotherms\n", "Selected 1 isotherms\n", "True\n" ] } ], "source": [ "# Getting all isotherms: 1 found\n", "isos = pgp.isotherms_from_db()\n", "# Filtering isotherms with an adsorbate: 0 found\n", "isos = pgp.isotherms_from_db(criteria={'adsorbate' : 'neon'})\n", "# Filtering isotherms on a material: 1 found\n", "isos = pgp.isotherms_from_db(criteria={'material' : 'Carbon X1'})\n", "\n", "# Check if the isotherm is the same\n", "print(isotherm == isos[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
WindowsPath('c:/users/pauli/git/pygaps/src/pygaps/data/default.db')\n", "\n" ], "text/plain": [ "\u001b[1;35mWindowsPath\u001b[0m\u001b[1m(\u001b[0m\u001b[32m'c:/users/pauli/git/pygaps/src/pygaps/data/default.db'\u001b[0m\u001b[1m)\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pygaps.DATABASE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However you can easily create your own, then use it instead. To do this pyGAPS provides an utility function." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Experiment type uploaded 'isotherm'\n", "Experiment type uploaded 'pointisotherm'\n", "Experiment type uploaded 'modelisotherm'\n" ] } ], "source": [ "from pygaps.utilities.sqlite_db_creator import db_create\n", "\n", "db_create(\"./own_database.db\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This new database is identical to the default pyGAPS database, and includes all\n", "adsorbate data. To use it for any storage, one can pass its path to the database\n", "interaction functions." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material properties type uploaded 'contact'\n", "Material properties type uploaded 'source'\n", "Material properties type uploaded 'treatment'\n", "Material uploaded: 'Carbon X1'\n", "Isotherm uploaded: '29c44c6f12c0f4735b6de977bdcef5c5'\n" ] } ], "source": [ "pgp.material_to_db(novel_material, db_path=\"./own_database.db\")\n", "pgp.isotherm_to_db(isotherm, db_path=\"./own_database.db\")" ] } ], "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.9.7" } }, "nbformat": 4, "nbformat_minor": 2 }