{"id":30749476,"url":"https://github.com/mishioo/tesliper","last_synced_at":"2025-09-04T06:07:16.713Z","repository":{"id":57474370,"uuid":"117064710","full_name":"mishioo/tesliper","owner":"mishioo","description":"Theoretical Spectroscopist's Little Helper","archived":false,"fork":false,"pushed_at":"2022-04-13T08:46:33.000Z","size":4948,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-20T13:26:15.193Z","etag":null,"topics":["batch-processing","chemical-computing","chemistry","gaussian","optical-spectroscopy","python","spectral-simulations","spectroscopy","workflow-automation"],"latest_commit_sha":null,"homepage":"https://tesliper.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mishioo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-01-11T07:17:55.000Z","updated_at":"2024-04-30T20:03:46.000Z","dependencies_parsed_at":"2022-09-12T19:40:23.275Z","dependency_job_id":null,"html_url":"https://github.com/mishioo/tesliper","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/mishioo/tesliper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mishioo%2Ftesliper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mishioo%2Ftesliper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mishioo%2Ftesliper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mishioo%2Ftesliper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mishioo","download_url":"https://codeload.github.com/mishioo/tesliper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mishioo%2Ftesliper/sbom","scorecard":{"id":649649,"data":{"date":"2025-08-11","repo":{"name":"github.com/mishioo/tesliper","commit":"e09dcbc0eeb5cc5f7d612ea7f913e4c5dd58a327"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: BSD 2-Clause \"Simplified\" License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.9.3 not signed: https://api.github.com/repos/mishioo/tesliper/releases/63501482","Warn: release artifact 0.9.2 not signed: https://api.github.com/repos/mishioo/tesliper/releases/60607229","Warn: release artifact 0.9.1 not signed: https://api.github.com/repos/mishioo/tesliper/releases/60602244","Warn: release artifact 0.9.0 not signed: https://api.github.com/repos/mishioo/tesliper/releases/57954240","Warn: release artifact 0.8.2 not signed: https://api.github.com/repos/mishioo/tesliper/releases/54529311","Warn: release artifact 0.9.3 does not have provenance: https://api.github.com/repos/mishioo/tesliper/releases/63501482","Warn: release artifact 0.9.2 does not have provenance: https://api.github.com/repos/mishioo/tesliper/releases/60607229","Warn: release artifact 0.9.1 does not have provenance: https://api.github.com/repos/mishioo/tesliper/releases/60602244","Warn: release artifact 0.9.0 does not have provenance: https://api.github.com/repos/mishioo/tesliper/releases/57954240","Warn: release artifact 0.8.2 does not have provenance: https://api.github.com/repos/mishioo/tesliper/releases/54529311"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-21T13:10:13.249Z","repository_id":57474370,"created_at":"2025-08-21T13:10:13.249Z","updated_at":"2025-08-21T13:10:13.249Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272236240,"owners_count":24897387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-26T02:00:07.904Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["batch-processing","chemical-computing","chemistry","gaussian","optical-spectroscopy","python","spectral-simulations","spectroscopy","workflow-automation"],"created_at":"2025-09-04T06:07:13.042Z","updated_at":"2025-09-04T06:07:16.699Z","avatar_url":"https://github.com/mishioo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build status](https://ci.appveyor.com/api/projects/status/vh0t6udj7mnpnfoe?svg=true)](https://ci.appveyor.com/project/mishioo/tesliper-jjshl)\n[![Documentation Status](https://readthedocs.org/projects/tesliper/badge/?version=stable)](https://tesliper.readthedocs.io/en/stable/?badge=stable)\n[![Coverage Status](https://coveralls.io/repos/github/mishioo/tesliper/badge.svg)](https://coveralls.io/github/mishioo/tesliper)\n[![PyPi version](https://badgen.net/pypi/v/tesliper/)](https://pypi.org/project/tesliper)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/tesliper.svg)](https://pypi.python.org/pypi/tesliper/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![License](https://img.shields.io/badge/License-BSD_2--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.04164/status.svg)](https://doi.org/10.21105/joss.04164)\n\n\u003cimg align=\"right\" width=\"100\" height=\"100\" src=\"https://raw.githubusercontent.com/mishioo/tesliper/master/tesliper/tesliper.ico\"\u003e\n\n# tesliper\n\n`tesliper`: Theoretical Spectroscopist's Little Helper is a program for batch processing\nof Gaussian output files, focused on calculations of vibrational, electronic, and\nscattering spectra from Gaussian-calculated quantum properties of molecule's conformers.\n\nIt allows to easily exclude conformers that are not suitable for further analysis:\nerroneous, not optimized, of higher energy or lower contribution than a user-given\nthreshold. It also implements an RMSD sieve, enabling one to filter out similar\nstructures. It lets you calculate theoretical IR, VCD, UV, ECD, Raman, and ROA spectra\nfor each conformer or as a population-weighted average and export obtained spectral data\nin one of supported file formats: `.txt`, `.csv`, or `.xlsx`. Finally, if allows to\neasily setup a next calculations step with batch export to `.gjf` Gaussian input files.\n\n`tesliper` is written in Python 3.6 and makes use of some additional third party\npackages (see below or requirements.txt). It may be used as a package or as a\nstand-alone application with dedicated GUI.\n\n- [tesliper](#tesliper)\n- [Getting Started](#getting-started)\n  - [Requirements](#requirements)\n  - [Installing to your Python distribution](#installing-to-your-python-distribution)\n  - [A standalone application](#a-standalone-application)\n- [How to use](#how-to-use)\n  - [Primer](#primer)\n  - [In Python scripts](#in-python-scripts)\n  - [A graphical interface](#a-graphical-interface)\n- [License](#license)\n- [Contributing to `tesliper`](#contributing-to-tesliper)\n  - [Bugs and suggestions](#bugs-and-suggestions)\n  - [Participating in code](#participating-in-code)\n  - [Roadmap](#roadmap)\n  - [Acknowledgements](#acknowledgements)\n- [How to cite](#how-to-cite)\n\n# Getting Started\n\nYou can use `tesliper` from python or as standalone application with dedicated graphical\nuser interface. See below for details.\n\n## Requirements\n\n```\nPython 3.6+\nnumpy\nopenpyxl\nmatplotlib (optional, for GUI)\n```\n\n`tesliper` uses `tkinter` to deliver the graphical interface. It is included in\nmost Python distributions, but please be aware, that some might miss it. You will\nneed to install it manually in such case.\n\n## Installing to your Python distribution\n\n`tesliper` is available on PyPI, you can install it to your python distribution by\nsimply running:\n\n`$ python -m pip install tesliper`\n\nor\n\n`$ python -m pip install tesliper[gui]`\n\nif you would like to be able to use a graphical interface.\n\n## A standalone application\n\nThis option is currently available only for Windows users.\nTo get your copy of `tesliper`, simply download a `Tesliper.exe` file from the\n[latest relase](https://github.com/Mishioo/tesliper/releases/latest).\nThis file is a standalone application, no installation is required.\n\n# How to use\nFull documentation is available online: https://tesliper.readthedocs.io/.\n\n## Primer\nConventions that are important to note:\n\n- `tesliper` stores multiple data entries of various types for each conformer. To\nprevent confusion with Python's data ``type`` and with data itself, `tesliper` refers to\nspecific kinds of data as \"genres\". Genres in code are represented by specific strings,\nused as identifiers. To learn about data genres known to `tesliper`, see [Available data\ngenres](https://tesliper.readthedocs.io/en/stable/genres.html).\n- `tesliper` identifies conformers using a stem of an extracted file (i.e. its filename\nwithout extension). When files with identical names are extracted in course of\nsubsequent `Tesliper.extract` calls or in recursive extraction using\n``Tesliper.extract(recursive=True)``, they are treated as data for one conformer.\nThis enables to join data from subsequent calculations steps, e.g. geometry\noptimization, vibrational spectra simulation, and electronic spectra simulation.\nPlease note that if specific data genre is available from more than one calculation\njob, only recently extracted values will be stored.\n- `tesliper` was designed to deal with multiple conformers of single molecule and may\nnot work properly when used to process data concerning different molecules (i.e.\nhaving different number of atoms, different number of degrees of freedom, etc.).\nIf you want to use it for such purpose anyway, you may set\n`Tesliper.conformers.allow_data_inconsistency` to ``True``. `tesliper` will then stop\ncomplaining and try to do its best.\n\n## In Python scripts\n`Tesliper` class is the main access point to `tesliper`'s functionality. It allows you\nto extract data from specified files, provides a proxy to the trimming\nfunctionality, gives access to data in form of specialized arrays, enables you\nto calculate and average desired spectra, and provides an easy way to export data.\n\nMost basic use might look like this:\n```python\nfrom tesliper import Tesliper\ntslr = Tesliper()\ntslr.extract()\ntslr.calculate_spectra()\ntslr.average_spectra()\ntslr.export_averaged()\n```\nThis extracts data from files in the current working directory, calculates\navailable spectra using standard parameters, averages them using available energy\nvalues, and exports to current working directory in .txt format.\n\nYou can customize this process by specifying call parameters for used methods\nand modifying `Tesliper`'s configuration attributes:\n- to change source directory\nor location of exported files instantiate `Tesliper` object with `input_dir`\nand `output_dir` parameters specified, respectively. You can also set appropriate\nattributes on the instance directly;\n- to extract only selected files in `input_dir` use `wanted_files` init parameter.\nIt should be given an iterable of filenames you want to parse. Again, you can\nalso directly set an identically named attribute;\n- use `Tesliper.conformers.trim...` methods to easily filter out conformers you wish\nto ignore in further analysis;\n- to change parameters used for calculation of spectra, modify appropriate entries\nof `parameters` attribute;\n- use other export methods to export more data and specify `fmt` parameter\nin method's call to export to other file formats.\n\n```python\ntslr = Tesliper(input_dir=\"./myjob/optimization/\", output_dir=\"./myjob/output/\")\ntslr.wanted_files = [\"one\", \"two\", \"three\"]  # only files with these names\ntslr.extract()  # use tslr.input_dir as source\ntslr.extract(path=\"./myjob/vcd_sim/\")  # use other input_dir\ntslr.conformers.trim_not_optimized()  # filtering out unwanted conformers\ntslr.parameters[\"vcd\"].update({\"start\": 500, \"stop\": 2500, \"width\": 2})\ntslr.calculate_spectra(genres=[\"vcd\"])  # we want only VCD spectrum\ntslr.average_spectra()\ntslr.export_averaged(mode=\"w\")  # overwrite previously exported files\ntslr.export_activities(fmt=\"csv\")  # save activities for analysis elsewhere\ntslr.output_dir = \"./myjob/ecd_sim/\"\ntslr.export_job_file(  # prepare files for next step of calculations\n    route=\"# td=(singlets,nstates=80) B3LYP/Def2TZVP\"\n)\n```\n\n## A graphical interface\nIf you are using `tesliper` as a standalone application, simply double click on the\n`Tesliper.exe` file to start the application. To invoke it from the command line,\njust run `tesliper-gui`. GUI consists of three panels and a number of controls.\nThe panels are: \"Extracted data\", \"Energies list\", and \"Spectra view\". First two\noffer a list of conformers read so far using \"Chose files\" and \"Chose folder\" buttons\non the left. The last enables to preview calculated spectra.\n\n![screenshot](https://raw.githubusercontent.com/mishioo/tesliper/master/docs/source/_static/screenshots/16426974012.png)\n\n- \"Extracted data\" panel shows an identifier of each conformer (a file name) and an\noverview of data extracted. Little checkboxes on the left of each conformer may be\nclicked to mark this conformer as \"kept\" or \"not kept\".\n- \"Energies list\" offers the same set of conformers and checkboxes, but with energies\nvalues listed for each conformer. The view may be changed using \"Show\" dropdown box\nin \"Energies and Structure\" section of controls, to present difference in energy\nbetween conformers or their percentage contribution in population.\n- \"Spectra view\" tab shows calculated spectra. It may be controlled using \"Calculate\nspectra\" section. After choosing a spectra genre to calculate you may control if it is\nsimulated using lorentzian or gaussian fitting function, change peak width, spectra\nbounds, etc. You may view spectra for one conformer, all of them stacked, or averaged.\nYou may also load an experimental spectrum (.txt or .csv format) for comparison.\n\n![screenshot](https://raw.githubusercontent.com/mishioo/tesliper/master/docs/source/_static/screenshots/16426984646.png)\n\nOnce done with extracting files and tweaking parameters, export selected data to desired\nformat or save the session for later using buttons in \"Session control\" section.\n\nA detailed tutorial with screenshots is available in the documentation:\nhttps://tesliper.readthedocs.io/en/stable/gui.html.\n\n# License\nThis project is licensed with BSD 2-Clause license.\nSee [LICENSE.txt](https://github.com/mishioo/tesliper/blob/master/LICENSE.txt)\nfile for details.\n\n# Contributing to `tesliper`\nContributions are welcome! `tesliper` is a growing project and definitely has room\nfor improvements. \n\n## Bugs and suggestions\nBug reports are of great value, if you encounter a problem please let me know by\nsubmitting a [new issue](https://github.com/mishioo/tesliper/issues/new).\nIf you have a suggestion how `tesliper` can be improved, please let me know as well!\n\n## Participating in code\nIf you'd like to contribute to `tesliper`'s codebase, that's even better! If there is a\nspecific bug that you know how to fix or a feature you'd like to develop, please let me\nknow via [issues](https://github.com/mishioo/tesliper/issues). To start coding, get your\nworking copy of `tesliper`'s source code by cloning the repository and then setup your\nenvironment by installing development dependencies (probably to a virtual environment):\n```\npython -m pip install .[dev]\n```\nPlease remember to add/update relevant tests along with your code changes.\nMake sure the test suite passes by running\n```\npython -m pytest test\n```\nor, if you'd like to also generate the coverage report, you can invoke the pytest\nwith the pytest-cov plugin (included in the \"dev\" installation), as shown below.\nThe .coveragerc file includes plugin's configuration (i.e. to omit GUI code).\n```\npython -m pytest --cov=tesliper --cov-config=.coveragerc test\n```\nIf you contribute code to `tesliper`, the test coverage badge will be updated by the CI\nservice after your changes are merged.\n\nAlthough [`mypy`](https://mypy.readthedocs.io/) is not incorporated in `tesliper`'s\ndevelopment (yet!), I believe that type hints greatly improve the experience of using\nthe package. Please, add them to the new code you submit. If you're willing to\nsupplement typing of the existing code, that would be very much welcome!\n\n`tesliper`'s codebase is formatted with [`black`](https://black.readthedocs.io/) and\n[`isort`](https://pycqa.github.io/isort/), please use these tools before submitting your\ncode contribution. To make it easier, you may use a pre-commit configuration available\nin this repository. To include it in your workflow, simply run `pre-commit install` in\nyour copy's root directory. Note, that this configuration also sets up\n[`flake8`](https://flake8.pycqa.org/) linter.\n\nTo get your change introduced to the codebase, please make a Pull Request to the `fixes`\nbranch for quick bug fixes or to the `dev` branch for new features and bigger changes.\nIf at a loss, do not hesitate to reach to me directly! :)\n\n## Roadmap\nIdeas for possible future improvements to the software are listed below. Based on the\nfeedback from the Community, I will decide, which ones are desired and worth working on.\n\n### New Functionality: \u003c!-- omit in toc --\u003e\n- command line interface\n- support for Jaguar \u0026 other packages\n- option for using `cclib` for parsing\n- spectra comparison feature\n- velocity and length electronic spectra comparison\n- parsing conformational search files\n- GUI: manually choose spectra colour\n\n### UX Improvements: \u003c!-- omit in toc --\u003e\n- supplement logging\n- auto finding optimal spectra range\n- GUI: export spectra as image\n- GUI: spectra colour by population\n- GUI: drag\u0026drop support\n- GUI: display tooltips on hover\n\n\n## Acknowledgements\n\nMany thanks to the scientists, who advised me on the domain-specific details and helped\nto test the software:\n\n[orcid_logo]: https://info.orcid.org/wp-content/uploads/2019/11/orcid_16x16.png\n\n- Joanna Rode [![orcid_id][orcid_logo] 0000-0003-0592-4053](https://orcid.org/0000-0003-0592-4053)\n- Magdalena Jawiczuk [![orcid_id][orcid_logo] 0000-0003-2576-4042](https://orcid.org/0000-0003-2576-4042)\n- Marcin Górecki [![orcid_id][orcid_logo] 0000-0001-7472-3875](https://orcid.org/0000-0001-7472-3875)\n\nas well as to people, who reviewed the project: [@alejandrogallo](https://github.com/alejandrogallo) and [@arepstein](https://github.com/arepstein).\n\n# How to cite\n\nI'm very happy to announce, that `tesliper` has been published in the [Journal of Open\nSource Software](https://joss.theoj.org/papers/10.21105/joss.04164)! If you find\n`tesliper` useful in your research, please give it a credit by citing it:\n\n- Więcław, M. M., (2022). tesliper: a theoretical spectroscopist's little helper.\n  *Journal of Open Source Software*, 7(72), 4164, DOI:\n  [10.21105/joss.04164](https://doi.org/10.21105/joss.04164)\n\n```\n@article{tesliper2022,\n  doi = {10.21105/joss.04164},\n  url = {https://doi.org/10.21105/joss.04164},\n  year = {2022},\n  publisher = {The Open Journal},\n  volume = {7},\n  number = {72},\n  pages = {4164},\n  author = {Michał M. Więcław},\n  title = {tesliper: a theoretical spectroscopist's little helper},\n  journal = {Journal of Open Source Software}\n}\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmishioo%2Ftesliper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmishioo%2Ftesliper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmishioo%2Ftesliper/lists"}