# Set minimal log verbosity
setVerbosity(MinimalLog)

# %% Create molecule from SMILES


def create_molecule_from_smiles():
    # Defined variables.
    smiles_string = 'Cc1ccc(C(O)=O)cc1'
    set_bonds = True

    # Script.
    # This custom script supports atkpython syntax
    # and can perform almost any procedure.
    smiles_configuration = moleculeFromSmiles(smiles_string, set_bonds=set_bonds)

    return smiles_configuration


smiles_configuration = create_molecule_from_smiles()

nlsave('moleculeFromSmiles_Example_results.hdf5', smiles_configuration)


# %% Set ForceFieldCalculator

# %% ForceFieldCalculator

OPLSPotentialBuilder = OPLSPotentialBuilder()
OPLSPotentialBuilder.assignAtomTypes(smiles_configuration, overwrite=True)
calculator = OPLSPotentialBuilder.createCalculator(smiles_configuration)


# %% Set Calculator

smiles_configuration.setCalculator(calculator)

smiles_configuration.update()

nlsave('moleculeFromSmiles_Example_results.hdf5', smiles_configuration)


# %% OptimizeGeometry

restart_strategy = RestartFromTrajectory(
    trajectory_filename='moleculeFromSmiles_Example_results.hdf5',
    object_id='optimize_trajectory',
)

optimized_configuration = OptimizeGeometry(
    configuration=smiles_configuration,
    trajectory_filename='moleculeFromSmiles_Example_results.hdf5',
    trajectory_object_id='optimize_trajectory',
    restart_strategy=restart_strategy,
)

nlsave(
    'moleculeFromSmiles_Example_results.hdf5',
    optimized_configuration,
    object_id='optgeom',
)


# %% TotalEnergy

total_energy = TotalEnergy(configuration=optimized_configuration)
nlsave('moleculeFromSmiles_Example_results.hdf5', total_energy)
