pytdscf.util package

Submodules

pytdscf.util.anim_density_matrix module

class pytdscf.util.anim_density_matrix.ComplexMatrixAnimation(data: ndarray[tuple[int, ...], dtype[complex128]], time: ndarray[tuple[int, ...], dtype[_ScalarType_co]] | None = None, title: str = 'Complex Matrix Hinton Plot', row_names: list[str] | None = None, col_names: list[str] | None = None, time_unit: str = 'fs', cmap: str = 'hsv', figshape: tuple[int, int] = (14, 10), add_text: bool = False)[source]

Bases: object

ax: Axes
cax: Axes
property cols: int
create_animation(interval: int = 200) tuple[Figure, FuncAnimation][source]

Create an animation of complex matrix Hinton plots.

Parameters:
  • data – Complex array of shape (time, row, column)

  • interval – Time interval between frames in milliseconds

Returns:

Figure and Animation objects

fig: Figure
plot_each_element(i: int, j: int, cmap: Colormap, norm: ndarray, phase: ndarray, data: ndarray) None[source]

Plot each element of the complex matrix.

Parameters:
  • i – Row index

  • j – Column index

  • cmap – Colormap object

  • norm – Magnitude of the complex number

  • phase – Phase of the complex number

  • data – Complex matrix data

property rows: int
set_ax(title: str | None = None) None[source]
set_cyclic_colorbar() Colormap[source]
setup_figure()[source]

Set up the figure and axes for the Hinton plot.

Parameters:

shape – Shape of the matrix (rows, columns)

Returns:

Figure and Axes objects

update(frame_num: int) None[source]

Update function for animation.

Parameters:

frame_num – Frame number

pytdscf.util.anim_density_matrix.get_anim(data: ndarray[tuple[int, ...], dtype[complex128]], time: ndarray[tuple[int, ...], dtype[_ScalarType_co]] | None = None, title: str = 'Density Matrix Evolution', row_names: list[str] | None = None, col_names: list[str] | None = None, time_unit: str = 'fs', save_gif: bool = False, gif_filename: str = 'animation.gif', cmap: str = 'hsv', fps: int = 5, dpi: int = 100, add_text: bool = False) tuple[Figure, FuncAnimation][source]

Main function to create Hinton plot animation from complex matrix data.

Parameters:
  • data (NDArray[np.complex128]) – Complex array of shape (time, row, column).

  • time (NDArray | None, optional) – Array of time points corresponding to the data. Defaults to None.

  • title (str, optional) – Title of the plot. Defaults to “Complex Matrix Hinton Plot”.

  • row_names (list[str] | None, optional) – List of row names. Defaults to None.

  • col_names (list[str] | None, optional) – List of column names. Defaults to None.

  • time_unit (str, optional) – Unit of time to display on the plot. Defaults to “”.

  • save_gif (bool, optional) – Whether to save the animation as a GIF. Defaults to False.

  • gif_filename (str, optional) – Output filename for GIF. Defaults to “animation.gif”.

  • cmap (str, optional) – Colormap to use for the plot. Defaults to “hsv”. cmap should be cyclic such as ‘twilight’, ‘twilight_shifted’, ‘hsv’. See also https://matplotlib.org/stable/users/explain/colors/colormaps.html#cyclic.

  • fps (int, optional) – Frames per second for GIF. Defaults to 5.

  • dpi (int, optional) – Dots per inch for the output GIF. Defaults to 100.

  • add_text (bool, optional) – Display matrix_element or not. Defaults to False.

Returns:

Figure and Animation objects.

Return type:

tuple[plt.Figure, animation.FuncAnimation]

Example

>>> # Create a 3x3 complex matrix that evolves over 10 time steps
>>> t = np.linspace(0, 2*np.pi, 10)
>>> data = np.zeros((10, 3, 3), dtype=np.complex128)
>>> for i in range(10):
...     data[i] = np.exp(1j * t[i]) * np.random.random((3, 3))
>>> fig, anim = main(data, time=t, save_gif=True)
>>> plt.show()
pytdscf.util.anim_density_matrix.save_animation(anim: FuncAnimation, filename: str = 'animation.gif', fps: int = 5, dpi: int = 100) None[source]

Save animation as a GIF file.

Parameters:
  • anim – Animation object

  • filename – Output filename

  • fps – Frames per second

  • dpi – Dots per inch for the output

pytdscf.util.gout2dipole module

Gaussian anharmonic dipole output to PyTDSCF dipole (mu_orig) converter - How to use

$ python3 gout2dipole.py *.log N_FRQS

N_FRQS = (number of atom)*3 -6 (if molecule is straight, -6 -> -5)

  • Gaussian input file needs “freq=(Anharm, noRaman) Symmetry=None”.

pytdscf.util.gout2mop module

Gaussian output anharmonic PES to MIDAS, SINDO PES(.mop) converter - How to use

$ python3 gout2mop.py **.log N_FRQS **.mop

N_FRQS = (number of atom)*3 -6 (if molecule is straight, -6 -> -5)

param outputfile:

default is prop_no_1.mop (for MIDAS)

  • defaut nMR is 4 in g16.

  • When product Qi odd times, sgn can be reversed.

  • Qi and Qj can be swaped.

  • Gaussian input file needs “freq=(Anharm, HPMode) Symmetry=None iop(4/34=1) iop(7/33=1)”.

pytdscf.util.grid2qff module

MakePES to PyTDSCF polynomial PES converter (least-aquare based)

$ python grid2qff.py pes_mrpes
pytdscf.util.grid2qff.basis_func(ijk, q_ijk)[source]

if ijk = ‘121’ return q_i^1*q_j^2*q_k^1

pytdscf.util.grid2qff.debug_plot(nMR, q_ijk, optimised_param, data, ijk_pairs, ijk_name)[source]
pytdscf.util.grid2qff.file_write(k_orig, mu, name)[source]
pytdscf.util.grid2qff.fiting_func1MR(param, q_i, data, ijk_pairs)[source]
pytdscf.util.grid2qff.fiting_func2MR(param, q_i, q_j, data, ijk_pairs)[source]
pytdscf.util.grid2qff.fiting_func3MR(param, q_i, q_j, q_k, data, ijk_pairs)[source]
pytdscf.util.grid2qff.fiting_func4MR(param, q_i, q_j, q_k, q_l, data, ijk_pairs)[source]
pytdscf.util.grid2qff.main()[source]
pytdscf.util.grid2qff.make_ijk(ijk, index, ijk_pairs, nMR, max_order)[source]

pytdscf.util.helper_input module

This module have been deprecated. But for testing, this module is still used.

pytdscf.util.helper_input.matJ_1D_exciton(nmol, nspf, s0, s1, coupleJ, *, deltaE=0.0, coupleE=0.0, coupleH=0.0, ndof_per_site=1, with_CT=False)[source]
pytdscf.util.helper_input.matJ_2D_exciton(nmol_row, nmol_col, nspf, coupleJ, s0, s1)[source]

F.Exciton-State

pytdscf.util.helper_input.matJ_LH2_exciton(nspf)[source]

pytdscf.util.hess_util module

Hessian Utility Scripts

pytdscf.util.hess_util.get_displce_from_hess(hess: ndarray, mass: List[float], massweighted: bool | None = True, onedim: bool | None = False) Tuple[ndarray, ndarray][source]

Get displacement vector (normal mode) from mass-weighted hessian

Parameters:
  • hess (np.ndarray) – hessian in a.u.

  • mass (List[float]) – List of atom weight in AMU.

  • massweighted (Optional[bool]) – input hessian is mass-weighted hessian. Defaults to True

  • onedim (Optional[bool]) – input hessian is one-dimensional array of upper-triangle part. Defaults to False.

Returns:

Non-mass weighted displacement vectors in a.u. and frequency in cm-1.

Return type:

Tuple[np.ndarray, np.ndarray]

pytdscf.util.hess_util.read_fchk_g16(file_path: str) Tuple[str, ndarray, ndarray, ndarray, ndarray][source]

Read Hessian in .fchk files from Gaussian16.

Parameters:
  • file_path (str) – Path to fchk file.

  • use_trans (bool) – Use translational vector. Defaults to False.

  • use_rot (bool) – Use rotatinal vector. Defaults to False.

Returns:

multiple contents listed below.

Return type:

Tuple

Return contents:
  • list(str) : atoms

  • numpy.ndarray : mass in AMU.

  • numpy.ndarray : coordinate in a.u. Shape is (natom, 3) , where natom = len(atoms).

  • numpy.ndarray : frequency in cm-1. Shape is (ndof, ), where ndof = 3*natom-6 or 3*natom-5. Nan represents imaginary frequency.

  • numpy.ndarray : displacement vectors in a.u. . Shape is (ndof, natom, 3). Not mass weighted and normalized !!

pytdscf.util.hess_util.read_minfo(file_path, use_trans: bool | None = False, use_rot: bool | None = False)[source]

Read .minfo files from MakePES in SINDO package. Not supported localized coordinate by JSindo.

Parameters:
  • file_path (str) – Path to .minfo file.

  • use_trans (bool) – Use translational vector. Defaults to False.

  • use_rot (bool) – Use rotatinal vector. Defaults to False.

Returns:

multiple contents listed below.

Return type:

tuple

Return contents:
  • list(str) : atoms

  • numpy.ndarray : mass in AMU.

  • numpy.ndarray : coordinate in a.u. Shape is (natom, 3) , where natom = len(atoms).

  • numpy.ndarray : frequency in cm-1. Shape is (ndof, ), where ndof = 3*natom-6.

  • numpy.ndarray : displacement vectors in a.u. . Shape is (ndof, natom, 3). Not mass weighted and normalized !!

pytdscf.util.korig2mop module

PyTDSCF polynomial operator(k_orig) to SINDO, MIDAS PES (.mop) converter

pytdscf.util.korig2op module

PyTDSCF polynomial operator(kroig) to QUANTICS operator(.op) converter * How to use

$ python3 PyTDSCH2mop.py N_FRQS

N_FRQS = (number of atom)*3 -6 (if molecule is straight, -6 -> -5) Qi and Qj can be swaped.

pytdscf.util.minfo2gout module

SINDO .minfo to Gaussian output converter * How to use

$ python3 minf2gout.py ---.log N_FRQS

N_FRQS = (number of atom)*3 -6 (if molecule is straight, -6 -> -5) Qi and Qj can be swapped.

pytdscf.util.mop2korig module

MIDAS, SINDO PES(.mop) to PyTDSCF polynomial PES(k_orig) converter * How to use

$ python3 mop2PyTDSCH_hamiltonian.py input.mop N_FRQS

N_FRQS = (number of atom)*3 -6 (if molecule is straight, -6 -> -5) Qi and Qj can be swapped.

pytdscf.util.plot_heatmap module

Plot potential Heatmap from PyTDSCF PES (wat3 example)

pytdscf.util.read_nc module

pytdscf.util.read_nc.read_nc(filename: str, sites: list[tuple[int, int]]) dict[source]

Module contents

pytdscf.util.get_anim(data: ndarray[tuple[int, ...], dtype[complex128]], time: ndarray[tuple[int, ...], dtype[_ScalarType_co]] | None = None, title: str = 'Density Matrix Evolution', row_names: list[str] | None = None, col_names: list[str] | None = None, time_unit: str = 'fs', save_gif: bool = False, gif_filename: str = 'animation.gif', cmap: str = 'hsv', fps: int = 5, dpi: int = 100, add_text: bool = False) tuple[Figure, FuncAnimation][source]

Main function to create Hinton plot animation from complex matrix data.

Parameters:
  • data (NDArray[np.complex128]) – Complex array of shape (time, row, column).

  • time (NDArray | None, optional) – Array of time points corresponding to the data. Defaults to None.

  • title (str, optional) – Title of the plot. Defaults to “Complex Matrix Hinton Plot”.

  • row_names (list[str] | None, optional) – List of row names. Defaults to None.

  • col_names (list[str] | None, optional) – List of column names. Defaults to None.

  • time_unit (str, optional) – Unit of time to display on the plot. Defaults to “”.

  • save_gif (bool, optional) – Whether to save the animation as a GIF. Defaults to False.

  • gif_filename (str, optional) – Output filename for GIF. Defaults to “animation.gif”.

  • cmap (str, optional) – Colormap to use for the plot. Defaults to “hsv”. cmap should be cyclic such as ‘twilight’, ‘twilight_shifted’, ‘hsv’. See also https://matplotlib.org/stable/users/explain/colors/colormaps.html#cyclic.

  • fps (int, optional) – Frames per second for GIF. Defaults to 5.

  • dpi (int, optional) – Dots per inch for the output GIF. Defaults to 100.

  • add_text (bool, optional) – Display matrix_element or not. Defaults to False.

Returns:

Figure and Animation objects.

Return type:

tuple[plt.Figure, animation.FuncAnimation]

Example

>>> # Create a 3x3 complex matrix that evolves over 10 time steps
>>> t = np.linspace(0, 2*np.pi, 10)
>>> data = np.zeros((10, 3, 3), dtype=np.complex128)
>>> for i in range(10):
...     data[i] = np.exp(1j * t[i]) * np.random.random((3, 3))
>>> fig, anim = main(data, time=t, save_gif=True)
>>> plt.show()
pytdscf.util.read_nc(filename: str, sites: list[tuple[int, int]]) dict[source]