# Set minimal log verbosity
setVerbosity(MinimalLog)


# Define elements
elements = [Carbon, Oxygen, Oxygen]

# Define coordinates
cartesian_coordinates = [[ 0.            ,  0.            ,  0.            ],
                         [ 1.320005372131,  0.            ,  0.            ],
                         [-1.320005372131,  0.            ,  0.            ]]*Angstrom

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

# Add bonds
bonds = [[0, 1],
         [0, 2]]
configurtion.setBonds(bonds)

# Create the LCAO calculator
basis_set = [
    BasisGGAPseudoDojo.Carbon_High,
    BasisGGAPseudoDojo.Oxygen_High,
]
solvation_parameters = CosmoSolvationParameters()
calculator = LCAOCalculator(
    basis_set=basis_set,
    solvation_parameters=solvation_parameters
)

# Set the calculator
configurtion.setCalculator(calculator)
configurtion.update()
nlsave('co2_cosmors_example.hdf5', configurtion)

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

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

# Create the CosmoRS analysis object
cosmo_rs = CosmoRS(
    configuration=optimized_configuration,
    solvation_energy=solvation_energy
)
nlsave('co2_cosmors_example.hdf5', cosmo_rs)
