Nanoparticle Atom Counter
=========================
Treating a supported nanoparticle as a spherical cap, NanoparticleAtomCounter rapidly estimates the number of **Total**, **Surface**, **Perimeter**, and **Interfacial** atoms (see below).
Only two inputs are mandatory: the radius and contact angle, readily obtainable from Transmission Electron Microscopy (TEM) images.
.. figure:: https://raw.githubusercontent.com/giolajide/NanoparticleAtomCounter/main/Nanoparticle_Legend.png
:width: 450
:alt: Atom types discriminated
:align: center
Can be used on the web app_ or on a command line.
Requirements
------------
* numpy>=1.20,<2.3
* pandas>=1.4
* streamlit>=1.4,<2
* openpyxl>=3.1.0
* xlrd>=2.0.1
For testing, these are also required
* pytest>=8,<9
* ase>=3.22.0,<3.25
* tqdm<=4.67.1
* joblib<=1.5.1
* ascii-colors
Installation
------------
First create and activate a new environment::
mamba create --name env_name "python>=3.10,<3.15"
mamba activate env_name
To install the latest version::
pip install NanoparticleAtomCounter
Alternatively::
git clone git@github.com:szilvasi-group/NanoparticleAtomCounter.git
cd NanoparticleAtomCounter/
pip install -e .
To be able to run tests::
pip install NanoparticleAtomCounter[test]
Usage
-------
**1) Prepare your input CSV**
Upload a ``.csv`` with these headers:
::
r (A), R (A), Theta, Element, Interface Facet, Surface Facet
Definitions:
- ``r (A)`` = footprint radius (in Angstrom); ``R (A)`` = radius of curvature (in Angstrom)
**r vs R**
========== ==========
|acute| |obtuse|
========== ==========
.. |acute| image:: https://raw.githubusercontent.com/giolajide/nanoparticleatomcounter/main/Acute_1.png
:width: 340
:alt: Acute theta
.. |obtuse| image:: https://raw.githubusercontent.com/giolajide/nanoparticleatomcounter/main/Obtuse_1.png
:width: 340
:alt: Obtuse theta
- Provide either ``r (A)`` or ``R (A)`` (if both are present, ``R (A)`` is ignored).
- ``Theta`` = contact angle (in degrees)
- ``Element`` = chemical symbol of the element that comprises the nanoparticle, e.g. ``Cr``
- ``Interface Facet`` and ``Surface Facet`` are OPTIONAL; leave blank if unknown.
- ``Interface Facet`` = facet at the nanoparticle-support interface, e.g. ``(1,1,1)``
- ``Surface Facet`` = dominant facet at the nanoparticle-gas/vacuum interface, e.g. ``(1,0,0)``
- Here's a sample input file_
**2) Use the web app**
Upload your input file and download the output.
OR
**2) Use the command line**
::
nanoparticle-atom-count -i input_file.csv -o output_file.csv
Testing
-------
If you have it installed with the tests, then run the following test and please let me know if there are any errors::
atom-count-test
Contact
-------
Any problems or questions?
* Email me at giolajide@crimson.ua.edu
* Or raise an issue right here_
.. _app: https://nanoparticle-atom-counting.streamlit.app
.. _here: https://github.com/szilvasi-group/NanoparticleAtomCounter/issues
.. _file: https://github.com/giolajide/NanoparticleAtomCounter/blob/main/sample_input.csv
Raw data
{
"_id": null,
"home_page": "https://github.com/szilvasi-group/NanoparticleAtomCounter#readme",
"name": "NanoparticleAtomCounter",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.15,>=3.10",
"maintainer_email": null,
"keywords": "nanoparticle, tem, electron microscopy, active site, catalyst",
"author": "Gbolagade Olajide, Tibor Szilvasi",
"author_email": "giolajide@crimson.ua.edu, tszilvasi@crimson.ua.edu",
"download_url": "https://files.pythonhosted.org/packages/cf/eb/01ab411a3987f066496202855c34fb514f3cf1da7926ccc98937b2d5d5d1/nanoparticleatomcounter-0.1.4.tar.gz",
"platform": null,
"description": "Nanoparticle Atom Counter\n=========================\n\nTreating a supported nanoparticle as a spherical cap, NanoparticleAtomCounter rapidly estimates the number of **Total**, **Surface**, **Perimeter**, and **Interfacial** atoms (see below).\nOnly two inputs are mandatory: the radius and contact angle, readily obtainable from Transmission Electron Microscopy (TEM) images.\n\n\n\n.. figure:: https://raw.githubusercontent.com/giolajide/NanoparticleAtomCounter/main/Nanoparticle_Legend.png \n :width: 450\n :alt: Atom types discriminated\n :align: center\n\n\n\nCan be used on the web app_ or on a command line.\n\n\n\n\nRequirements\n------------\n\n* numpy>=1.20,<2.3\n* pandas>=1.4\n* streamlit>=1.4,<2\n* openpyxl>=3.1.0\n* xlrd>=2.0.1\n\n\nFor testing, these are also required\n\n* pytest>=8,<9\n* ase>=3.22.0,<3.25\n* tqdm<=4.67.1\n* joblib<=1.5.1\n* ascii-colors\n\n\n\nInstallation\n------------\n\nFirst create and activate a new environment::\n\n mamba create --name env_name \"python>=3.10,<3.15\"\n mamba activate env_name\n\nTo install the latest version::\n\n pip install NanoparticleAtomCounter\n \n\nAlternatively::\n\n git clone git@github.com:szilvasi-group/NanoparticleAtomCounter.git\n cd NanoparticleAtomCounter/\n pip install -e .\n\nTo be able to run tests::\n\n pip install NanoparticleAtomCounter[test]\n\n\nUsage\n-------\n\n**1) Prepare your input CSV**\n\nUpload a ``.csv`` with these headers:\n\n::\n\n r (A), R (A), Theta, Element, Interface Facet, Surface Facet\n\nDefinitions:\n\n- ``r (A)`` = footprint radius (in Angstrom); ``R (A)`` = radius of curvature (in Angstrom)\n\n**r vs R**\n\n========== ==========\n|acute| |obtuse|\n========== ==========\n\n.. |acute| image:: https://raw.githubusercontent.com/giolajide/nanoparticleatomcounter/main/Acute_1.png\n :width: 340\n :alt: Acute theta\n\n.. |obtuse| image:: https://raw.githubusercontent.com/giolajide/nanoparticleatomcounter/main/Obtuse_1.png\n :width: 340\n :alt: Obtuse theta\n\n\n- Provide either ``r (A)`` or ``R (A)`` (if both are present, ``R (A)`` is ignored).\n- ``Theta`` = contact angle (in degrees)\n- ``Element`` = chemical symbol of the element that comprises the nanoparticle, e.g. ``Cr``\n- ``Interface Facet`` and ``Surface Facet`` are OPTIONAL; leave blank if unknown.\n - ``Interface Facet`` = facet at the nanoparticle-support interface, e.g. ``(1,1,1)``\n - ``Surface Facet`` = dominant facet at the nanoparticle-gas/vacuum interface, e.g. ``(1,0,0)``\n\n- Here's a sample input file_\n\n\n**2) Use the web app**\n\nUpload your input file and download the output.\n\nOR\n\n\n**2) Use the command line**\n\n::\n\n nanoparticle-atom-count -i input_file.csv -o output_file.csv\n\n\nTesting\n-------\n\nIf you have it installed with the tests, then run the following test and please let me know if there are any errors::\n\n atom-count-test\n\n\n\nContact\n-------\n\nAny problems or questions?\n\n* Email me at giolajide@crimson.ua.edu\n* Or raise an issue right here_\n\n\n\n\n.. _app: https://nanoparticle-atom-counting.streamlit.app\n.. _here: https://github.com/szilvasi-group/NanoparticleAtomCounter/issues\n.. _file: https://github.com/giolajide/NanoparticleAtomCounter/blob/main/sample_input.csv\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Estimates atom counts in monometallic nanoparticles given radius and contact angle",
"version": "0.1.4",
"project_urls": {
"Bug Tracker": "https://github.com/szilvasi-group/NanoparticleAtomCounter/issues",
"Documentation": "https://github.com/szilvasi-group/NanoparticleAtomCounter#readme",
"Homepage": "https://github.com/szilvasi-group/NanoparticleAtomCounter#readme"
},
"split_keywords": [
"nanoparticle",
" tem",
" electron microscopy",
" active site",
" catalyst"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "eee3246b06197e5e489fc0c897eb99c557ccfbe1f11644cf6bdf638441c6a1c8",
"md5": "6400edcdea2cc13680b57a4e9d477ea5",
"sha256": "2827746d4e4e3500c7b756928b5a06b440cae9e9214184e37a9644ec5e1e4db7"
},
"downloads": -1,
"filename": "nanoparticleatomcounter-0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6400edcdea2cc13680b57a4e9d477ea5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.15,>=3.10",
"size": 58868,
"upload_time": "2025-08-11T17:39:33",
"upload_time_iso_8601": "2025-08-11T17:39:33.580898Z",
"url": "https://files.pythonhosted.org/packages/ee/e3/246b06197e5e489fc0c897eb99c557ccfbe1f11644cf6bdf638441c6a1c8/nanoparticleatomcounter-0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cfeb01ab411a3987f066496202855c34fb514f3cf1da7926ccc98937b2d5d5d1",
"md5": "9ddad6e96745469fb33f76a8a8279536",
"sha256": "130314db8905faa86e36bf6ce4443339d049ba1977583f90ce2e2ccc97922eec"
},
"downloads": -1,
"filename": "nanoparticleatomcounter-0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "9ddad6e96745469fb33f76a8a8279536",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.15,>=3.10",
"size": 50875,
"upload_time": "2025-08-11T17:39:34",
"upload_time_iso_8601": "2025-08-11T17:39:34.813127Z",
"url": "https://files.pythonhosted.org/packages/cf/eb/01ab411a3987f066496202855c34fb514f3cf1da7926ccc98937b2d5d5d1/nanoparticleatomcounter-0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-11 17:39:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "szilvasi-group",
"github_project": "NanoparticleAtomCounter#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "numpy",
"specs": [
[
">=",
"1.20"
],
[
"<",
"2.3"
]
]
},
{
"name": "pandas",
"specs": [
[
">=",
"1.4"
]
]
},
{
"name": "streamlit",
"specs": [
[
">=",
"1.4"
]
]
},
{
"name": "openpyxl",
"specs": [
[
">=",
"3.1.0"
]
]
},
{
"name": "xlrd",
"specs": [
[
">=",
"2.0.1"
]
]
}
],
"lcname": "nanoparticleatomcounter"
}