# Set minimal log verbosity
setVerbosity(MinimalLog)

# Define elements
elements = [Nitrogen, Hydrogen, Hydrogen, Hydrogen]

# Define coordinates
cartesian_coordinates = [[ 0.            ,  0.            ,  0.            ],
                         [ 1.06999992324 ,  0.            ,  0.            ],
                         [-0.35666664108 ,  0.            , -1.008805602123],
                         [-0.35666664108 , -0.873651278919,  0.504402801062]]*Angstrom

# Set up configuration
configuration = MoleculeConfiguration(
    elements=elements,
    cartesian_coordinates=cartesian_coordinates
)

#----------------------------------------
# Basis Set
#----------------------------------------
basis_set = [
    BasisGGAPseudoDojo.Hydrogen_High,
    BasisGGAPseudoDojo.Nitrogen_High,
]

solvation_parameters = CosmoSolvationParameters(
    solvent_dielectric_constant=2.3741,
    solvent_surface_tension=27.9*dyne/cm
)

calculator = LCAOCalculator(
    basis_set=basis_set,
    solvation_parameters=solvation_parameters
)

# Set the calculator
configuration.setCalculator(calculator)
configuration.update()
nlsave('ammonia_toluene.hdf5', configuration)

# Optimize the geometry
optimized_configuration = OptimizeGeometry(
    configuration=configuration,
    trajectory_filename='ammonia_toluene.hdf5'
)
nlsave('ammonia_toluene.hdf5', optimized_configuration)

# Calculate the solvation energy
solvation_energy = SolvationEnergy(
    configuration=optimized_configuration
)
nlsave('ammonia_toluene.hdf5', solvation_energy)
