#+TITLE: Li2S-P2S5-LiI Glass: PS4-Centered Ion Density Analysis
#+AUTHOR: Minami Sakuma
#+OPTIONS: toc:2 num:nil

* Overview

This repository contains Python scripts for analyzing and visualizing
Li and I spatial probability distributions around =PS4^{3-}= units in
Li2S-P2S5-LiI glass trajectories.

The workflow consists of two steps:

1. =dump2cube.py=
   - Reads a LAMMPS trajectory.
   - Aligns each =PS4^{3-}= tetrahedron using the nearest I^- ion.
   - Accumulates Li and I positions in the aligned coordinate system.
   - Outputs three-dimensional probability-density data in Gaussian cube format.

2. =cube2mayavi.py=
   - Reads the generated cube file.
   - Visualizes the spatial probability density as an isosurface using Mayavi.
   - Displays the reference =PS4^{3-}= tetrahedron.

The scripts are intended to analyze the local geometrical relationship
between I^- ions and =PS4^{3-}= units in Li2S-P2S5-LiI glasses.

* Files

| File | Description |
|---+---|
| =dump2cube.py= | Converts a LAMMPS trajectory into Li/I probability-density cube files. |
| =cube2mayavi.py= | Visualizes a cube file with Mayavi. |
| =050Li3PS4-050LiI.lammpstrj= | Example LAMMPS trajectory. |
| =050Li3PS4-050LiI_PS4_I.cube= | Example I^- probability-density cube file. |

* Requirements

The scripts require Python 3 and the following packages:

- NumPy
- Mayavi
- VTK
- Traits
- PyQt5 or PySide6, depending on the Mayavi installation

Example installation using conda:

#+begin_src bash
conda create -n ps4-density python=3.10
conda activate ps4-density
conda install -c conda-forge numpy mayavi pyqt
#+end_src

Alternatively, NumPy can be installed using pip:

#+begin_src bash
pip install numpy
#+end_src

Mayavi installation is generally more stable with conda-forge.

* Input Trajectory Format

=dump2cube.py= assumes a LAMMPS trajectory containing the following
atom columns:

#+begin_example
ITEM: ATOMS id type element mol x y z
#+end_example

The trajectory must contain at least the following elements:

- Li
- P
- S
- I

The script assumes that P and S atoms belonging to the same
=PS4^{3-}= unit share the same molecule ID (=mol=).

* Analysis Procedure

For each trajectory frame:

1. Each P atom is selected as the center of a reference =PS4^{3-}= unit.
2. The four nearest I^- ions are identified.
3. The nearest I^- ion is used to define the orientation of the =PS4^{3-}= unit.
4. The =PS4^{3-}= tetrahedron is rotated into a common reference frame.
5. Li positions within the cutoff distance are accumulated.
6. The positions of the four nearest I^- ions are accumulated.
7. Three-dimensional histograms are written as cube files.

The reference orientation is defined as follows:

- The S atom farthest from the nearest I^- ion is aligned with the z axis.
- A second S atom is used to fix the rotation around the z axis.

* Usage

** Generate Cube Files

#+begin_src bash
python dump2cube.py \
  -i 050Li3PS4-050LiI.lammpstrj \
  -m 160 160 160 \
  -cut 8
#+end_src

Arguments:

| Argument | Description |
|---+---|
| =-i=, =--trjfile= | Input LAMMPS trajectory file. |
| =-m=, =--mesh= | Number of grid points in x, y, and z directions. |
| =-cut=, =--cutoff= | Spatial cutoff radius in angstrom. |

Expected output files:

#+begin_example
050Li3PS4-050LiI_PS4_Li.cube
050Li3PS4-050LiI_PS4_I.cube
#+end_example

** Visualize I^- Probability Density

#+begin_src bash
python cube2mayavi.py \
  -i 050Li3PS4-050LiI_PS4_I.cube \
  -atom I \
  -iso 1.26483e-09
#+end_src

** Visualize Li+ Probability Density

#+begin_src bash
python cube2mayavi.py \
  -i 050Li3PS4-050LiI_PS4_Li.cube \
  -atom Li \
  -iso 1.0e-09
#+end_src

The appropriate isovalue depends on the trajectory length, mesh size,
cutoff radius, and probability-density distribution. It should therefore
be adjusted for each dataset.

* Output

The cube files contain:

- A reference =PS4^{3-}= tetrahedron:
  - P atom at the origin
  - Four S atoms in the aligned coordinate system
- A three-dimensional spatial probability-density field for Li or I

The cube files can be visualized using:

- Mayavi
- VMD
- PyMOL
- ParaView
- Other software supporting Gaussian cube files

* Visualization Colors

The default visualization settings in =cube2mayavi.py= are:

| Object | Color |
|---+---|
| P | Purple |
| S | Yellow |
| Li probability density | Blue |
| I probability density | Red |
| P-S bonds | Gray |

* Notes

- The trajectory is treated using periodic boundary conditions.
- Coordinates are converted to fractional coordinates before alignment.
- The current implementation assumes an orthorhombic simulation box for
  the trajectory parsing procedure.
- The script includes a triclinic-cell lattice conversion function, but
  the exact input format should be checked before applying it to
  triclinic LAMMPS trajectories.
- Large trajectory and cube files can exceed the standard GitHub file-size
  limit. Git LFS is recommended when files are larger than 100 MB.

* Citation

If this repository is used in research, please cite the corresponding
publication or presentation describing the Li2S-P2S5-LiI glass analysis.

* License

This repository is intended for academic research use.
