#+TITLE: dump2rotorang.py
#+AUTHOR:
#+DATE:

* Overview

=dump2rotorang.py= analyzes LAMMPS trajectory files and calculates
orientation and z-position distributions of benzene molecules.

The script reads LAMMPS dump trajectory files =*.lammpstrj=, extracts the
coordinates of selected atoms in each molecule, and evaluates:

- the in-plane orientation angle of each benzene molecule
- the center z-position of each benzene molecule

The resulting histograms are saved as Python pickle files.

* Requirements

This script requires Python 3 and the following Python packages:

- numpy
- pandas

Install them, for example, using pip:

#+begin_src sh
pip install numpy pandas
#+end_src

* Input files

The script searches for trajectory files with the following filename
patterns:

#+begin_src text
D3d-o_*K.lammpstrj
D3d-p_*K.lammpstrj
#+end_src

For example:

#+begin_src text
D3d-o_300K.lammpstrj
D3d-o_400K.lammpstrj
D3d-p_300K.lammpstrj
D3d-p_400K.lammpstrj
#+end_src

The temperature is extracted from the filename using the pattern:

#+begin_src text
_(number)K.lammpstrj
#+end_src

For example, =D3d-o_300K.lammpstrj= is interpreted as 300 K.

* LAMMPS dump format

The trajectory file is assumed to be a LAMMPS dump file containing
unwrapped atomic coordinates:

#+begin_src text
xu yu zu
#+end_src

The script also assumes that the dump file contains a =mol= column, which
is used to identify molecules.

A typical header should include columns such as:

#+begin_src text
ITEM: ATOMS id mol type xu yu zu
#+end_src

* Analysis details

The benzene atoms are selected by the following atom indices within each
molecule:

#+begin_src python
benzene_id = [24, 25, 26, 27, 28, 29]
#+end_src

These indices are hard-coded in the script.

The orientation of each benzene molecule is calculated from the vector
between:

- the center of the selected benzene atoms
- the midpoint of atoms 25 and 26 in the selected benzene atom list

The orientation angle is calculated using:

#+begin_src python
np.arctan2(vec[:, 1], vec[:, 0])
#+end_src

The z-position is calculated as the mean z-coordinate of the selected
benzene atoms.

* Output files

The script creates the following pickle files:

#+begin_src text
D3d-o.pkl
D3d-p.pkl
#+end_src

Each pickle file contains a dictionary indexed by temperature.

For example:

#+begin_src python
dset[300]["orientation"]
#+end_src

contains a pandas DataFrame with the following columns:

| Column    | Description                              |
|-----------+------------------------------------------|
| angle     | Bin center of orientation angle           |
| angle_y   | Histogram count of orientation angle      |
| zpos      | Bin center of z-position                  |
| zpos_y    | Histogram count of z-position             |

* Usage

Place =dump2rotorang.py= in the directory containing the LAMMPS trajectory
files, then run:

#+begin_src sh
python dump2rotorang.py hoge.lammpstrj
#+end_src

If trajectory files matching the expected patterns exist, the script will
print the processed filenames and create pickle files.

Example:

#+begin_src text
D3d-o_300K.lammpstrj
D3d-o_400K.lammpstrj
D3d-o.pkl was created.
D3d-p_300K.lammpstrj
D3d-p_400K.lammpstrj
D3d-p.pkl was created.
#+end_src

* Example

If =example.lammpstrj= is included as a sample trajectory file, rename or
copy it to match the expected naming rule before running the script:

#+begin_src sh
cp example.lammpstrj D3d-o_300K.lammpstrj
python dump2rotorang.py
#+end_src

This will create:

#+begin_src text
D3d-o.pkl
#+end_src

* Notes

- The atom indices used for benzene are currently hard-coded.
- The script assumes that all molecules have the same number of atoms.
- The orientation histogram is calculated in the range from =-pi= to =pi=.
- The z-position histogram is calculated in the range from =24= to =25=.
- If the target system or molecule definition is changed, the values of
  =benzene_id= and the histogram range for z-position may need to be
  modified.

* Files managed in this repository

This repository is intended to manage only the following files:

#+begin_src text
dump2rotorang.py
example.lammpstrj
README.org
.gitignore
#+end_src


