# PyExoCross

**PyExoCross is a python package and program for generating molecular and atomic spectra and cross sections**

## Description

[*PyExoCross*](https://github.com/ExoMol/PyExoCross "PyExoCross") is a Python adaptation of the [*ExoCross*](https://github.com/ExoMol/ExoCross "ExoCross") Fortran application.

*PyExoCross* is designed for postprocessing the huge molecular line lists generated by the ExoMol project and other similar initiatives such as the HITRAN and HITEMP. *PyExoCross* generates absorption and emission spectra and other properties (partition functions, specific heats, cooling functions, lifetimes, oscillator strengths, and stick spectra) based on molecular line lists. *PyExoCross* calculates cross sections with four line profiles: Doppler, Gaussian, Lorentzian, and Voigt; a number of options are available for computing Voigt profiles. *PyExoCross* can convert data format between ExoMol and HITRAN. *PyExoCross* supports importing and exporting line lists in the ExoMol and HITRAN/HITEMP formats.

## PyExoCross Python Package

*PyExoCross* ***PyPI*** : [https://pypi.org/project/pyexocross/](https://pypi.org/project/pyexocross/)

*PyExoCross* ***API Reference*** : [https://pyexocross.readthedocs.io/en/latest/python_api/index.html](https://pyexocross.readthedocs.io/en/latest/python_api/index.html)

### Install from PyPI (Python package)

```bash
pip install pyexocross
```

### Use as a Python package

```python
import pyexocross as px

print(px.__version__)
```

For detailed usage, see the Python API Reference in the documentation:
[https://pyexocross.readthedocs.io/en/latest/python_api/index.html](https://pyexocross.readthedocs.io/en/latest/python_api/index.html)

## PyExoCross Python Program

*PyExoCross* ***GitHub*** : [https://github.com/Beryl-Jingxin/PyExoCross](https://github.com/Beryl-Jingxin/PyExoCross)

*PyExoCross* ***Manual*** : [https://pyexocross.readthedocs.io](https://pyexocross.readthedocs.io)

*PyExoCross* ***Wiki*** : [https://github.com/Beryl-Jingxin/PyExoCross/wiki](https://github.com/Beryl-Jingxin/PyExoCross/wiki)

*PyExoCross* ***NASA EMAC***: [https://emac.gsfc.nasa.gov?cid=2407-003](https://emac.gsfc.nasa.gov?cid=2407-003)

### Download program

Download PyExoCross program by command:

```bash
git clone https://github.com/Beryl-Jingxin/PyExoCross.git
```

### Install Python packages

```bash
pip install -r requirements.txt
```

Python packages version (see `requirements.txt` for installable bounds; tested on Python 3.8–3.12):

| Python packages   | Version range              |
| :---------------- | -------------------------- |
| python_version    | 3.8, 3.9, 3.10, 3.11, 3.12 |
| numpy             | >=1.20, <2.0               |
| pandas            | >=1.4, <3.0                |
| scipy             | >=1.7, <2.0                |
| numexpr           | >=2.7.0,<3.0.0             |
| matplotlib        | >=3.5, <4.0                |
| tqdm              | >=4.64.0,<5.0.0            |
| tabulate          | >=0.8.9,<1.0.0             |
| requests          | >=2.25.1,<3.0.0            |
| astropy           | >=5.0.0,<7.0.0             |
| dask              | >=2022.5, <2025            |
| pandarallel       | >=1.6.5,<2.0.0             |

### Run PyExoCross program

In the terminal, use the following commands to run PyExoCross:

```bash
python run.py -p input_filepath
```

If the input filepath is `/home/username/PyExoCross/input/H2O_exomol.inp`

```bash
python run.py -p ./input/H2O_exomol.inp
# OR 
python run.py -p /home/username/PyExoCross/input/H2O_exomol.inp
```

If you want to run program in conda environment which is named as 'exomol', please use command:

```bash
/home/username/anaconda3/envs/exomol/bin/python run.py -p ./input/H2O_exomol.inp
```

If you need to run program in background, please use command:

```bash
# Recommended: Without log file (the program will record log automatically)
nohup python -u run.py -p ./input/H2O_exomol.inp > /dev/null 2>&1
# Save log file
nohup python -u run.py -p ./input/H2O_exomol.inp > ./output/H2O_exomol.out 2>&1 &
# OR 
nohup /home/username/anaconda3/envs/exomol/bin/python -u run.py -p ./input/H2O_exomol.inp > ./output/H2O_exomol.out 2>&1 &
```

## Notes for input file

All information can be written in the input file. Just change the information you will use.You don't need to change any other unnecessary information.Please do not change the first column strings.

# <font color=Green>**Citation**</font>

## PyExoCross Paper

*PyExoCross* ***Published*** Paper : [https://doi.org/10.1093/rasti/rzae016](https://doi.org/10.1093/rasti/rzae016)

*PyExoCross* ***arXiv*** Preprint : [https://arxiv.org/abs/2406.03977](https://arxiv.org/abs/2406.03977)

## <font color=Green>**Please cite PyExoCross paper**</font> &#x1F49A;

<font color=Green>***Cite***</font>

Jingxin Zhang, Jonathan Tennyson, Sergei N Yurchenko, 
PyExoCross: a Python program for generating spectra and cross-sections from molecular line lists, 
*RAS Techniques and Instruments*, Volume 3, Issue 1, January 2024, Pages 257–287, 
https://doi.org/10.1093/rasti/rzae016

<font color=Green>***Bibtex***</font>

```bash
@article{pyexocross,
    author   = {Zhang, Jingxin and Tennyson, Jonathan and Yurchenko, Sergei N},
    title    = {{PyExoCross: a Python program for generating spectra and cross-sections from molecular line lists}},
    journal  = {RAS Techniques and Instruments},
    volume   = {3},
    number   = {1},
    pages    = {257-287},
    year     = {2024},
    month    = {04},
    issn     = {2752-8200},
    doi      = {10.1093/rasti/rzae016},
    url      = {https://doi.org/10.1093/rasti/rzae016},
    eprint   = {https://academic.oup.com/rasti/article-pdf/3/1/257/61224370/rzae016.pdf},
}
```

## Support databases

&#x2705; ExoMol  

&#x2705; ExoAtom

&#x2705; HITRAN

&#x2705; HITEMP

&#x23F3; ExoMolHR
