DiPolMol-Py
===========
A Python package to calculate the rotational and hyperfine structure of doublet-Sigma molecules (e.g., CaF, BaF, SrF) in the presence of external fields.

DiPolMol-Py is licensed under a BSD 3 clause license, a copy can be found `See the [LICENSE](LICENSE) file'.
If you use our work for academic purposes you can cite us using:

 B.Humphreys *et al.* DiPolMol-Py: A Python package for calculations for $^{2}{\Sigma}$ ground-state molecules (https://arxiv.org/pdf/2503.21663).

Installation
----------

run: pip install dipolmol

This installs the latest stable release and all required dependencies.

Package structure
-------------
**Programme Files:**

*Hamiltonian* – used to build the required Hamiltonian using matrix representation, including the field-free Hamiltonian and in the presence of magnetic, dc electric and off-resonant light fields.

*Calculate* – uses the eigenstates and eigenenergies found from diagonalising the Hamiltonian to run various calculations. Can be used to identify quantum numbers of eigenstates, calculate transition dipole moments and polarisabilities.

*Constants* – includes all known  constants for CaF, BaF and SrF.

**Examples:**

There are three example files for calculating the energy structure in the presence of a magnetic, off-resonant light and electric field (*example_Bfield, example_ac_Efield, example_dc_Efield*). 

There are two files to calculate the electric and magnetic moments of states (*example_electric_moment, example_magnetic_moment*). 

We provide *example_polarisability* to calculate the polarisability for a given wavelength and polarisation of light. 

Finally, *example_tdm* can be used to calculate the transition dipole moment.

Example
-------
.. code-block:: python

	import numpy as np
	import dipolmol.hamiltonian as hamiltonian
	import dipolmol.calculate as calc
	from dipolmol.constants import SrF
	
	Nmax=4 #Identify the maximum N 
	H0,H_B,H_dc,H_ac 
		= hamiltonian.build
			(Nmax,SrF,zeeman=True,Edc=False
              ,Eac=False) 

	B = np.linspace(0,100,5000)*1e-4 #Tesla
	
	H = H_0[..., None] + H_B[..., None]*B
	H = H.transpose(2,0,1)
	
	energies, states, label_list = 
       calc.solve(H, Nmax, SrF,label=True, B)

Resulting plot of above code

.. image:: Images/zeeman_SrF_plot.png
  :width: 400
  :alt: Resulting plot of above example

For more examples of usage, see the ``./Examples`` module.
