{ "cells": [ { "cell_type": "markdown", "id": "331e5089", "metadata": {}, "source": [ "## pmcpy quickstart" ] }, { "cell_type": "code", "execution_count": 1, "id": "194d2b4d", "metadata": {}, "outputs": [], "source": [ "# import necessary package\n", "import pmcpy\n", "import xarray as xr\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "7a7c76e8", "metadata": {}, "source": [ "### load the raw output file from PartMC" ] }, { "cell_type": "code", "execution_count": 2, "id": "ad5a1212", "metadata": {}, "outputs": [], "source": [ "# define the path to data\n", "p = \"../data/urban_plume_0001_00000002.nc\"\n", "pmc = pmcpy.load_pmc(p)" ] }, { "cell_type": "markdown", "id": "af91c7e5", "metadata": {}, "source": [ "### number concentration" ] }, { "cell_type": "code", "execution_count": 3, "id": "cc663120", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overall number conc.: 8854807162.459946 # m^{-3}\n", "diameter<=2.5um: 8854806282.274422 # m^{-3}\n", "diameter>=2.5um: 880.1855249722205 # m^{-3}\n" ] } ], "source": [ "print(\"overall number conc.:\", pmc.get_num_conc(), \"# m^{-3}\")\n", "print(\"diameter<=2.5um:\", pmc.get_num_conc(pmc.get_aero_particle_diameter()<=2.5e-6), \"# m^{-3}\")\n", "print(\"diameter>=2.5um:\", pmc.get_num_conc(pmc.get_aero_particle_diameter()>=2.5e-6), \"# m^{-3}\")" ] }, { "cell_type": "markdown", "id": "e7df9ace", "metadata": {}, "source": [ "### aerosol mass concentration of selected species" ] }, { "cell_type": "code", "execution_count": 4, "id": "5cac3855", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BC and OC mass conc,: [6.53030409e-10 5.73984931e-09] kg m^{-3}\n", "overall mass conc.: 2.2186891469474523e-08 kg m^{-3}\n", "overall dry mass conc.: 1.316284475347949e-08 kg m^{-3}\n", "PM2.5 mass conc. (with water): 2.2164289553077785e-08 kg m^{-3}\n" ] } ], "source": [ "# consider BC and OC only\n", "aero_species_ls = [\"BC\",\"OC\"]\n", "print(\"BC and OC mass conc,:\",\n", " pmc.get_aero_mass_conc(aero_species_ls),\n", " \"kg m^{-3}\")\n", "\n", "# consider all species and dry species\n", "all_aero_species = pmc.aero_species.copy()\n", "dry_aero_species = all_aero_species.copy()\n", "dry_aero_species.remove(\"H2O\")\n", "\n", "print(\"overall mass conc.:\",\n", " pmc.get_aero_mass_conc(all_aero_species).sum(), \n", " \"kg m^{-3}\")\n", "print(\"overall dry mass conc.:\", \n", " pmc.get_aero_mass_conc(dry_aero_species).sum(),\n", " \"kg m^{-3}\")\n", "print(\"PM2.5 mass conc. (with water):\",\n", " pmc.get_aero_mass_conc(all_aero_species,\n", " part_cond=(pmc.get_aero_particle_diameter()<=2.5e-6)).sum(), \n", " \"kg m^{-3}\")" ] }, { "cell_type": "markdown", "id": "bd53af6b", "metadata": {}, "source": [ "### overall mass concentration" ] }, { "cell_type": "code", "execution_count": 5, "id": "ef4398c8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overall mass conc.: 2.2186891469474523e-08 kg m^{-3}\n", "overall dry mass conc.: 1.316284475347949e-08 kg m^{-3}\n", "PM2.5 mass conc. (with water): 2.2164289553077805e-08 kg m^{-3}\n" ] } ], "source": [ "print(\"overall mass conc.:\", \n", " pmc.get_mass_conc(dry=False), \"kg m^{-3}\")\n", "print(\"overall dry mass conc.:\", \n", " pmc.get_mass_conc(dry=True), \"kg m^{-3}\")\n", "print(\"PM2.5 mass conc. (with water):\",\n", " pmc.get_mass_conc(dry=False, part_cond=pmc.get_aero_particle_diameter()<=2.5e-6), \"kg m^{-3}\")" ] }, { "cell_type": "markdown", "id": "6c8a0d4f", "metadata": {}, "source": [ "### aerosol density" ] }, { "cell_type": "code", "execution_count": 6, "id": "2ba67685", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overall density.: 1179.020687087021 kg m^{-3}\n", "overall dry density: 2265.3505453667535 kg m^{-3}\n", "PM2.5 density (with water): 1178.3768174927013 kg m^{-3}\n" ] } ], "source": [ "print(\"overall density.:\", \n", " pmc.get_aero_density(dry=False), \"kg m^{-3}\")\n", "print(\"overall dry density:\", \n", " pmc.get_aero_density(dry=True), \"kg m^{-3}\")\n", "print(\"PM2.5 density (with water):\",\n", " pmc.get_aero_density(dry=False, part_cond=pmc.get_aero_particle_diameter()<=2.5e-6), \"kg m^{-3}\")" ] }, { "cell_type": "markdown", "id": "e9b94920", "metadata": {}, "source": [ "### gas mixing ratio" ] }, { "cell_type": "code", "execution_count": 7, "id": "dbd0be18", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'gas_mixing_ratio' (gas_species: 2)>\n",
       "array([354.311384,  43.069374])\n",
       "Coordinates:\n",
       "  * gas_species  (gas_species) int32 17 11\n",
       "Attributes:\n",
       "    unit:       ppb\n",
       "    long_name:  mixing ratios of gas species
" ], "text/plain": [ "\n", "array([354.311384, 43.069374])\n", "Coordinates:\n", " * gas_species (gas_species) int32 17 11\n", "Attributes:\n", " unit: ppb\n", " long_name: mixing ratios of gas species" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gas_list = ['CO','O3']\n", "pmc.get_gas_mixing_ratio(gas_list)" ] }, { "cell_type": "markdown", "id": "474c43fe", "metadata": {}, "source": [ "### mixing state index calculation" ] }, { "cell_type": "markdown", "id": "18641e6e", "metadata": {}, "source": [ "based on `group_list`" ] }, { "cell_type": "code", "execution_count": 8, "id": "0cfb35da", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.838104186813985" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "group_list = [['SO4','Cl','ARO1','ARO2','ALK1','OLE1',\n", " 'API1','API2','LIM1','LIM2','Na'],\n", " ['BC','OC','OIN']]\n", "pmc.get_mixing_state_index(group_list=group_list, diversity=False)" ] }, { "cell_type": "markdown", "id": "8c2f830e", "metadata": {}, "source": [ "based on all species (``without water``)" ] }, { "cell_type": "code", "execution_count": 9, "id": "028de248", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6471920046172539" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pmc.get_mixing_state_index(drop_list=[\"H2O\"], diversity=False)" ] }, { "cell_type": "markdown", "id": "85d12f78", "metadata": {}, "source": [ "specific `range of diameters` and display `diversity` ($D_\\alpha$, $D_\\gamma$, $\\chi$)" ] }, { "cell_type": "code", "execution_count": 10, "id": "46cd627b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3.1876143541221267, 4.355134759609094, 0.6520198176412457)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pmc.get_mixing_state_index(drop_list=[\"H2O\"], \n", " part_cond=pmc.get_aero_particle_diameter()<=2.5e-6, \n", " diversity=True)" ] }, { "cell_type": "markdown", "id": "1407923e", "metadata": {}, "source": [ "### particle size distribution visualization (number concentration v.s. diameter)" ] }, { "cell_type": "markdown", "id": "73f62b03", "metadata": {}, "source": [ "overall number concentration" ] }, { "cell_type": "code", "execution_count": 11, "id": "46d9360b", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# get number distribution\n", "aero_diameter = pmc.get_aero_particle_diameter()\n", "num_conc_per_particle = pmc.ds[\"aero_num_conc\"]\n", "\n", "# setup the 111 bins ranged from 10^-8 to 10^-6\n", "bins = np.logspace(-8,-6,2*50+1)\n", "\n", "# plot the number distribution\n", "plt.hist(aero_diameter, bins=bins, weights=num_conc_per_particle)\n", "plt.xscale('log')\n", "plt.xlabel('diameter [m]')\n", "plt.ylabel(r'num conc. [# m$^{-3}$]')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7db175ec", "metadata": {}, "source": [ "number concentration for particles with diameters between 1$\\mu$m and 2.5$\\mu$m" ] }, { "cell_type": "code", "execution_count": 12, "id": "35a78e84", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# get the diameters of all particles\n", "aero_diameter = pmc.get_aero_particle_diameter()\n", "# select particles with diameters between 1um and 2.5um\n", "part_cond = (aero_diameter<=2.5e-6) & (aero_diameter>=1.0e-6)\n", "\n", "aero_diameter_cond = aero_diameter[part_cond]\n", "num_conc_per_particle_cond = pmc.ds[\"aero_num_conc\"][part_cond]\n", "\n", "# setup the 111 bins ranged from 10^-8 to 10^-6\n", "bins = np.logspace(-7,-5,2*50+1)\n", "\n", "# plot the number distribution\n", "plt.hist(aero_diameter_cond, bins=bins, weights=num_conc_per_particle_cond)\n", "plt.xscale('log')\n", "plt.xlabel('diameter [m]')\n", "plt.ylabel(r'num conc. [# m$^{-3}$]')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c2c66791", "metadata": {}, "source": [ "### black carbon fraction in dry particles" ] }, { "cell_type": "code", "execution_count": 13, "id": "6722bae9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,\n", " 5.78304546e-20, 0.00000000e+00, 0.00000000e+00])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get dry species per parctile\n", "all_aero_species = pmc.aero_species.copy()\n", "dry_aero_species = all_aero_species.copy()\n", "dry_aero_species.remove(\"H2O\")\n", "mass_per_dry_particle = pmc.ds[\"aero_particle_mass\"]\\\n", " .sel(aero_species = pmc.aero_species_to_idx(dry_aero_species))\\\n", " .sum(dim=\"aero_species\").values\n", "# get black carbon mass per particle\n", "bc_per_particle = pmc.ds[\"aero_particle_mass\"]\\\n", " .sel(aero_species=pmc.aero_species_to_idx([\"BC\"])).values.reshape(-1)\n", "bc_per_particle" ] }, { "cell_type": "code", "execution_count": 14, "id": "2fba10cf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "269" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bc_frac_per_dry_particle = bc_per_particle / mass_per_dry_particle\n", "(bc_frac_per_dry_particle > 0.01).sum()" ] }, { "cell_type": "markdown", "id": "7ddfa903", "metadata": {}, "source": [ "### black carbon core volume" ] }, { "cell_type": "code", "execution_count": 15, "id": "67bce63f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1800.])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "BC_density = pmc.ds[\"aero_density\"].sel(aero_species = pmc.aero_species_to_idx([\"BC\"])).values\n", "BC_density" ] }, { "cell_type": "code", "execution_count": 16, "id": "b7031026", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.00000000e+00, 0.00000000e+00, 0.00000000e+00, ...,\n", " 3.21280303e-23, 0.00000000e+00, 0.00000000e+00]])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# volume = mass / density\n", "pmc.ds[\"aero_particle_mass\"].sel(aero_species = pmc.aero_species_to_idx([\"BC\"])).values / BC_density" ] } ], "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.8.13" } }, "nbformat": 4, "nbformat_minor": 5 }