{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Parsing examples\n", "\n", "Some examples on parsing to and from supported formats. More info about all\n", "parsing methods can be found in the [manual section](../manual/parsing.rst).\n", "\n", "## Declare paths\n", "\n", "First, let's do all the necessary imports and generate the paths that we'll use\n", "for file import and export." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "from pathlib import Path\n", "import pygaps.parsing as pgp\n", "\n", "# Get directory paths\n", "base_path = Path.cwd() / 'data' / 'parsing'\n", "\n", "# Find files\n", "aif_file_paths = list((base_path / 'aif').rglob('*.aif'))\n", "json_file_paths = list((base_path / 'json').rglob('*.json'))\n", "xl_file_paths = list((base_path / 'excel').rglob('*.xls'))\n", "csv_file_paths = list((base_path / 'csv').rglob('*.csv'))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Manufacturer import\n", "\n", "Many report files from various adsorption device manufacturers can be imported\n", "directly using pyGAPS. Here are some examples." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Specified adsorbate is not in internal list (or name cannot be resolved to an existing one). Thermodynamic backend disabled for this gas/vapour.\n", "No data collected for pressure_saturation in file c:\\Users\\pauli\\git\\pyGAPS\\docs\\examples\\data\\parsing\\commercial\\mic\\Sample_C.xls.\n" ] } ], "source": [ "cfld = base_path / \"commercial\"\n", "dvssms = pgp.isotherm_from_commercial(cfld / \"smsdvs\" / \"13X water 30c.xlsx\", 'smsdvs', 'xlsx')\n", "micromeritics = pgp.isotherm_from_commercial(cfld / \"mic\" / \"Sample_C.xls\", 'mic', 'xl')\n", "belsorp_dat = pgp.isotherm_from_commercial(cfld / \"bel\" / \"DUT-13-CH4-190K.DAT\", 'bel', 'dat')\n", "threeP_xl = pgp.isotherm_from_commercial(cfld / \"3p\" / \"MOF_N2_77K.xlsx\", '3p', 'xl')\n", "quantachrome = pgp.isotherm_from_commercial(\n", " cfld / \"qnt\" / \"DUT-6_N2_77K (Raw Analysis Data).txt\", 'qnt', 'txt-raw'\n", ")\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## AIF Parsing\n", "### AIF Import\n", "\n", "Adsorption information files are fully supported in pyGAPS, both for import and\n", "exports. Isotherms can be imported from an `.aif` as:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material: DMOF\n", "Adsorbate: ethane\n", "Temperature: 298.15K\n", "Units: \n", "\tUptake in: cm3(STP)/g\n", "\tPressure in: kPa\n", "Other properties: \n", "\tuser: single gas\n", "\tdate: 2019-08-19T00:00:00\n", "\tinstrument: BEL VC-05\n", "\tmaterial_mass: 0.817\n", "\tmaterial_batch: [Zn2(tm-bdc)2(dabco)]\n", "\tmaterial_mass_unit: g\n", "\n" ] } ], "source": [ "# Import all\n", "isotherms = [pgp.isotherm_from_aif(path) for path in aif_file_paths]\n", "\n", "# Display an example file\n", "print(next(isotherms))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### AIF Export\n", "\n", "Similarly, an isotherm can be exported as an AIF file or a string, depending on\n", "whether a path is passed. For this purpose use either the module\n", "`pygaps.isotherm_to_aif()` function or the convenience class function\n", "`to_aif()`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# module function\n", "for isotherm, path in zip(isotherms, aif_file_paths):\n", " pgp.isotherm_to_aif(isotherm, path)\n", "\n", "# save to file with convenience function\n", "isotherms[0].to_aif('isotherm.aif')\n", "\n", "# string\n", "isotherm_string = isotherms[0].to_aif()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## JSON Parsing\n", "### JSON Import\n", "\n", "Isotherms can be imported either from a json file or from a json string. The\n", "same function is used in both cases." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material: TEST\n", "Adsorbate: n-butane\n", "Temperature: 298.15K\n", "Units: \n", "\tUptake in: g/g\n", "\tPressure in: bar\n", "Other properties: \n", "\tiso_type: isotherm\n", "\tmaterial_batch: TB\n", "\n" ] } ], "source": [ "# Import them\n", "isotherms = [pgp.isotherm_from_json(path) for path in json_file_paths]\n", "\n", "# Display an example file\n", "print(next(isotherms))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### JSON Export\n", "\n", "Exporting to JSON can be done to a file or a string, depending on whether a path\n", "is passed. For this purpose use either the module `pygaps.isotherm_to_json()`\n", "function or the convenience class function `to_json()`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# module function\n", "for isotherm, path in zip(isotherms, json_file_paths):\n", " pgp.isotherm_to_json(isotherm, path, indent=4)\n", "\n", "# save to file with convenience function\n", "isotherms[0].to_json('isotherm.json')\n", "\n", "# string\n", "isotherm_string = isotherms[0].to_json()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Excel Parsing\n", "\n", "Excel *does not* have to be installed on the system in use.\n", "\n", "### Excel Import" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material: MCM-41\n", "Adsorbate: nitrogen\n", "Temperature: 77.0K\n", "Units: \n", "\tUptake in: mmol/g\n", "\tPressure in: bar\n", "Other properties: \n", "\tcomment: None\n", "\tdate: None\n", "\tlab: MADIREL\n", "\tinstrument: Triflex\n", "\tproject: None\n", "\tactivation_temperature: 150.0\n", "\tuser: PI\n", "\tiso_type: Isotherme\n", "\tmaterial_batch: Test\n", "\n" ] } ], "source": [ "# Import them\n", "isotherms = [pgp.isotherm_from_xl(path) for path in xl_file_paths]\n", "\n", "# Display an example file\n", "print(next(isotherms))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAGoCAYAAAATsnHAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABK80lEQVR4nO3dd3xUVfrH8c+TTlMEQVF6FQEhEEGwu4qiWLG3BQv28rMrigVcddlddXVdO7j2BqIoYJcmkUASiiAEBCEIhA4hdeb8/phJSAIhyTCTmSTf9+s1LzL33pn7zNXMk3POc88x5xwiIiKRJircAYiIiOyNEpSIiEQkJSgREYlISlAiIhKRlKBERCQixYQ7gFA7+OCDXdu2bcMdhoiIlGPu3LkbnXPNym6v9Qmqbdu2pKSkhDsMEREph5mt2tt2dfGJiEhEUoISEZGIpAQlIiIRSQlKREQikhKUiIhEJCUoERGJSEpQIiISkZSgREQkIilBiYhIRFKCEhGRiKQEJSIiEUkJqgo8Hi+TZqUy6n+fMWlWKh6PN6jv37ZtW1q0aIHH4yneNnbsWMyMF198EYCCggJGjhxJ586d6datG127duXuu++moKCg0u9RnscffxwzY+HChcXb7rnnHtq1a7fH9r2ZNm0aZsbo0aOLt82aNYsjjzyyUp9/5cqV9OrVq/jRtm1bmjRpUu728ixdupT+/fvTuXNn+vfvz7Jlyyq1r6S2bdsWf95du3Zx+umnM2zYsFLXtYiZsXPnzkp9xsoq+Z69evUiJycnqO8vUhPU+slig8Xj8XL6vc+QvHg52bn5NEiIo1/XDkwdcz/R0cHL8y1atGDq1KmceeaZALz11lv06dOneP+wYcPIyclh7ty5NGrUiIKCAsaOHUteXh6xsbGVeo+9mTdvHrNnz6Z169altp933nnccccdHH/88RXGPm/ePI4++mg+/fRTHn744eJtvXv3rtRnb9u2LWlpacXP77zzTgoLC8vdXp4bb7yRW265hSuvvJJ33nmHG264ge+//77CfXuzbds2zjrrLPr06cNzzz2HmVXqswRTyc8uEik8Hi+Tk9NJzVhFYsc2DOrXM6jfhaAEBcCdL7xDWsZeJ9Mttmn7Tn5dlYnX6wDYmZPHD2mL6XXdCJoe0LDc1/Xq2Ibnbruy0rEMHTqUcePGceaZZ/L777+za9cuunfvDsCyZcuYMGECa9asoVGjRgDExsYyfPjwSr/H3uTl5XHLLbfw3nvvcfLJJ5fad9xxx1U69nnz5nHVVVfx4osv8vvvv9OuXbsqJaiS8vPzeffdd5k6dWqlthfZsGED8+bN45tvvgHgsssu49ZbbyUrKwvnXLn7mjXbY6Z/NmzYwFVXXcXZZ5/NE088Uam4p0yZwoMPPojH46FZs2a88sordOzYEYArrriC3377jby8PDp27Mibb77JQQcdBMD48eN56KGHaNKkSfEfFkXMjB07dtCwYUPMjCeffJIJEyawadMmxowZw5AhQwD49NNPGTFiBPXq1eOiiy5ixIgRxa8TCabq+oNdXXyVtDMntzg5FfF6HTtzcoN6npNPPpn58+ezZcsWxo0bx9VXX128LzU1lU6dOhV/qQXyHnszcuRIrrzyStq1a7dfsc+bN4/ExETOP/98xo8fX7wtkAT1+eefc/jhh+/x2vK2F1m9ejWHH3440dHRAERHR3PYYYexevXqfe7bm4svvrhKyakoob377rvMnz+fyy+/nCuuuKJ4//PPP09KSgoLFiygW7duPPPMM8Wvu/7665k4cSKzZs0iLi5un+c54IADmDNnDm+//Ta333578XsMHz6cL774gtTUVOrVq1epmEUCMTk5neTFy9mZk4dzjp05eSQvXs7k5PSgnkctKKhUC2fSrFQuG/UfdubkFW9rWC+eF26/msEDEoMWi5lx8cUX88EHH/Dhhx8yc+bM4vWsnHMVvLri9yjr559/Zs6cOTz99NP7FXdOTg5Lly6lV69exMXF8X//93/ceuutLF68mMTERGbMmFHcFdm4ceMKx8PefPNNrrnmmkpvD4UzzzyTDz/8kJtuuokWLVpUeHxycjI9e/YsHnMbNmwYN998Mzt27KBRo0b873//49133yU/P5/s7Gw6d+4MwOzZs+nduzddunQBYPjw4dx///3lnufSSy8F4JhjjmHt2rXk5uYWv0enTp0AuOaaa7jrrrv26/OLlCc1YxXZufmltmXn5pOWsSqo34dqQVXSoH496de1Aw3rxWNmNKwXT7+uHRjUr2fQzzV06FBGjhxJ9+7dadq0afH23r17s2zZMrZs2RLwe4wdO7a42ODdd9/lp59+YsmSJbRr1462bduyZs0aTj/9dL7++usqxZyenk779u1p2LAhRx99NGvWrOHr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" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "isotherms[1].plot()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Excel Export" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Export each isotherm in turn\n", "for isotherm, path in zip(isotherms, xl_file_paths):\n", " pgp.isotherm_to_xl(isotherm, path)\n", "\n", "# save to file with convenience function\n", "isotherms[0].to_xl('isotherm.xls')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## CSV Parsing\n", "### CSV Import\n", "\n", "\n", "Like JSON, isotherms can be imported either from a CSV file or from a CSV string. The same function is used in both cases." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Material: HKUST-1(Cu)\n", "Adsorbate: carbon dioxide\n", "Temperature: 303.0K\n", "Units: \n", "\tUptake in: mmol/g\n", "\tPressure in: bar\n", "Other properties: \n", "\tmaterial_batch: Test\n", "\tiso_type: Calorimetrie\n", "\tuser: ADW\n", "\tmachine: CV\n", "\tdate: 21/05/2010 00:00\n", "\tactivation_temperature: 150.0\n", "\tlab: MADIREL\n", "\n" ] } ], "source": [ "# Import them\n", "isotherms = [pgp.isotherm_from_csv(path) for path in csv_file_paths]\n", "\n", "# Display an example file\n", "print(next(isotherms))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### CSV Export" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Export each isotherm in turn\n", "for isotherm, path in zip(isotherms, csv_file_paths):\n", " pgp.isotherm_to_csv(isotherm, path)\n", "\n", "# save to file with convenience function\n", "isotherms[0].to_csv('isotherm.csv')\n", "\n", "# string representation\n", "isotherm_string = isotherms[0].to_csv()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.12 ('sci')", "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.16" }, "vscode": { "interpreter": { "hash": "bb92cfc77ebe3751b7fb3df8620ceb006227daaf69256df93b17635e0b7c66c1" } } }, "nbformat": 4, "nbformat_minor": 2 }