Skip to main content

Synthesizing and fitting coherent anti-Stokes Raman spectra (CARS) in Python

Project description

CARSpy

https://img.shields.io/badge/License-BSD%203--Clause-blue.svg https://img.shields.io/pypi/v/carspy.svg https://img.shields.io/pypi/pyversions/carspy.svg https://travis-ci.com/chuckedfromspace/carspy.svg Documentation Status

Synthesizing and fitting coherent anti-Stokes Raman spectra in Python.

Background

Having no access to the source codes of any of the existing CARS programs, I started this project simply as a way to learn more about CARS. I ended up spending a lot of time sifting through literatures from the past decades, trying to figure out what were done to analyze experimental CARS spectra and how they were implemented. The latter proved rather challenging as specific implementations weren’t always laid out in sufficient (mathematical) details to facilitate comprehension and replication (e.g., things as trivial as units for different constants weren’t always made clear in some publications).

In an effort to put together a fully-functioning CARS fitting program, I thought it would perhaps benefit other CARS practitioners (especially the newcomers) if I open source my implementations. I hope to also benefit from this transparency and openness to public scrutiny. Although the “draft” code (not available in this public repo) already lives up to my original purpose (least-square fit of experimental broadband CARS spectra), it is most likely not error-free and has a lot of room left for improvement. Therefore, I plan to rewrite the important modules (spectrum synthesis and least-square fit) and slowly bring all features (see below) up to date. I am also looking forward to feedbacks and potential collaborators from the community.

Quick start

$ pip install carspy

See installation guide for alternative methods.

Live demonstration

To try out the basic functions of carspy, head over to the Live demo, which is a webapp built with Plotly/Dash and hosted on Heroku to showcase how CARS spectrum could be synthesized and fitted with carspy. The computation/loading speed is largely limited by the cloud server and Internet speed. For a much better performance, download or fork the carspy app repository and run the app locally.

https://raw.githubusercontent.com/chuckedfromspace/carspy-dash/main/assets/demo1.gif

Features

  • CARSpy (stands for Coherent Anti-Stokes Raman Spectroscopy):

carspy structure
  • The CARS model:

cars model

Highlights

  • Readily extendable for species other than N2 and for other CARS setup other than typical broadband CARS.

  • Option to incorporate equilibrium composition using an external chemical equilibrium calculator (such as cantera), such that temperature is the only fitting parameter for thermometry.

  • Vibrational and rotational nonequilibrium: vibrational temperature can be varied independently from rotational temperature.

Comparisons with CARSFT

vs_CARSFT_01

Figure 1 Synthesized CARS spectra in N2 at 1 atm, 2400 K, with a pump linewidth of 0.5 cm-1, using Voigt lineshape and cross-coherence convolution.

vs_CARSFT_02

Figure 2 Synthesized CARS spectra in N2 at 10 atm, 2400 K, with a pump linewidth of 0.5 cm-1, using modified exponential gap law (MEG) and cross-coherence convolution.

Roadmap

The above features currently present in the draft code will be gradually improved and included in the main branch. Here is a tentative plan:

  • (Done) Module for synthesizing CARS spectra (optional with cantera)

  • (Done) Module for least-square fit (optional with lmfit)

  • (Done) Parallel processing example with joblib

  • (Mid-term) EMEG and XMEG for high-pressure combustion environments

  • (Long-term) Enrich documentation

  • (Long-term) Other common diatomic species

  • (Long-term) Dualpump/Wide CARS

Citation

Please consider citing this repository if you use carspy for your publications as:

@misc{Yin2021,
  author = {Yin, Zhiyao},
  title = {CARSpy: Synthesizing and fitting coherent anti-Stokes Raman spectra in Python},
  year = {2021},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/chuckedfromspace/carspy}}
}

Acknowledgement

  • A copy of the NRC report (TR-GD-013_1989) was kindly provided by Dr. Gregory Smallwood and his colleagues at NRC, which has significantly eased the difficulty of understanding some of the key theories in synthesizing CARS spectra.

  • This package was initially created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

Change Log

0.5.0 (2021-05-17)

  • Add link to a standalone web application that demonstrates the basic functions for synthesizing CARS spectra

0.4.2 (2021-03-12)

  • Add missing json data files to the package.

0.4.1 (2021-03-10)

  • Implement an asymmetric “super” Voigt function for better fitting slit function.

0.4.0 (2021-03-03)

  • Implement least-square fitting routine with lmfit (optional).

  • Add documentations for the least-square fitting module.

  • Add usage examples for both synthesizing and fitting CARS spectra.

0.3.0 (2021-02-25)

  • Implement optional function for calculating local gas composition at chemical equilibrium using cantera.

  • Add documentations for secondary modules.

  • Add bibtex style references in documentations.

0.2.1 (2021-02-14)

  • Change Sphinx theme.

  • Add existing modules to docs.

  • Fix format errors in docstrings.

0.2.0 (2021-02-13)

  • Implement modules for synthesizing N2 CARS spectra.

0.1.0 (2021-02-13)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

carspy-0.5.0.tar.gz (33.4 kB view details)

Uploaded Source

Built Distribution

carspy-0.5.0-py2.py3-none-any.whl (28.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file carspy-0.5.0.tar.gz.

File metadata

  • Download URL: carspy-0.5.0.tar.gz
  • Upload date:
  • Size: 33.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.7

File hashes

Hashes for carspy-0.5.0.tar.gz
Algorithm Hash digest
SHA256 de3cedcd98bb9a310833d9a6d09e08315930f7015e0ea2afac9765202273e7b2
MD5 34131e6093a9ac3987bf17e861456ff0
BLAKE2b-256 a06460376a4ff2bbb30777e53af4ad9bb1b9d028b5e0eab05929eb75f90568ff

See more details on using hashes here.

File details

Details for the file carspy-0.5.0-py2.py3-none-any.whl.

File metadata

  • Download URL: carspy-0.5.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 28.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.8.7

File hashes

Hashes for carspy-0.5.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 963a0e7439ce11fc1b5ca3c95e433d120ac2e0254e9d40cc00acedef4810da11
MD5 e0c2d89511b19eeb9bdceb316700f551
BLAKE2b-256 9a672cd88174c8451be3c9b68bfc813e8534ab39cb9a70c7bbade2252e245db0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page