# Molecular Moments and Polarizabilities Calculator

[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)

![HMPOLImage](./img/HMpolImg.jpg)
## Overview

The Python code is designed for calculating higher-order moments and polarizabilities of small molecules. It is a versatile tool that provides insights into the molecular properties essential for understanding electronic structure and molecular interactions. The moments and polarizabilites so calculated are used as the parameter sets for the SCME code. 

## Features

### Moments Calculation
- **Dipole Moment**
- **Quadrupole Moment** 
- **Octapole Moment** 
- **Hexadecapole Moment** 

### Polarizabilities Calculation
- **Dipole-Dipole Polarizability** 
- **Dipole-Quadrupole Polarizability** 
- **Quadrupole-Quadrupole Polarizability** 

## How to Use

### Running the code [with PYSCF]
    conda create --name cpol-pyscf
    conda activate cpol-pyscf
    pip3 install cpol-pyscf


copy the following H2O molecule geometry in a  **molecule.xyz** file

    3
    Properties=species:S:1:pos:R:3 pbc="F F F"
    O       -0.00000000       0.00000000       0.06664447
    H        0.76804750       0.00000000      -0.52889132
    H       -0.76804750       0.00000000      -0.52889132


And run the following script to test out the implementation with pyscf

    from pyscf import gto
    from ase.io import read
    from cpol_pyscf import Pols
    import numpy as np
    from ase.visualize import view
    from ase.units import Bohr, Ha


    mol = gto.Mole()
    molecule = read("molecule.xyz")
    mol.atom = "molecule.xyz" 
    mol.basis = "augccpvqz"
    mol.build()


    field_strength_F = 0.00486/Ha*Bohr


    pols = Pols(molecule,mol, irrep=False, field_strength_F=field_strength_F)

    print("dd polarizability")
    print(pols.calc_dd_pol())
    print("dq polarizability")
    print(pols.calc_dq_pol())
    print("qq polarizability")
    print(pols.calc_qq_pol())
