Title: ETH_Sem6 / DC / W04_DataRepresentations

Q: Modeling for smaller data sets (2)
A: - Statistical models
- Mechanistically informed descriptors, eg. Sterimol

Q: Hammett equation/parameters
A: \[\log \frac{K_x}{K_H} = \rho \sigma_x\]\(\rho\) is the sensitivity parameter, for \(\sigma_x\) fixed

Q: Cyclohexane A values
A: From Gibbs free energy difference between axial and equatorial
\[A = \Delta G^{\circ}_{ax} - \Delta G^{\circ}_{eq}\]Usually given in kcal/mol :(

Q: Problems with experimental descriptors
A: Incomplete, for example not everything can be used as a substituent for everything \(\Rightarrow\)Missing data kills machine learning

Q: What is a conformer ensemble? Why do we need it? How would you generate it in python? What do you need to be aware of?
A: Conformer ensembles, aka structural ensembles are computational models that describe the 3D structure of molecules. A molecule is neither a 2D structure nor a single 3D structure, but rather an ensemble of continuously inter-converting 3D structures. Ensembles of many such stable configurations can be used to represent the molecule.
To generate conformer ensembles from SMILES, we can use MORFEUS:
from morfeus.conformer import ConformerEnsemble
conformer_ensemble = ConformerEnsemble.from_rdkit(smiles, optimize="MMFF94")
But be aware: This randomly creates 3D structures and optimizes them with QCEngine \(\Rightarrow\)takes ages for large molecules.

Q: Examples of physical descriptors for phosphine ligands (5)
A: - Ligand solid angle (light source at ligand center, measure ligand shadow on surrounding sphere)
- Tolman cone angle
- Exact ligand cone angle (TCA improved for asymmetric monodentate and bidentate ligands, completely general)
- Buried volume (volume taken by ligand in cutoff sphere, usually \(r = 0.3 \, \mathrm{nm}\)
- Sterimol (more complex)
from morfeus import Sterimol, read_xyz
elements, coordinates = read_xyz("tBu.xyz")
sterimol = Sterimol(elements, coordinates, 1, 2)
sterimol.L_value
>>> 4.209831193078874
sterimol.B_1_value
>>> 2.8650676183152837
sterimol.B_5_value
>>> 3.26903261263369
sterimol.print_report()
>>> L B_1 B_5
>>> 4.21 2.87 3.27

Q: QM descriptors (dis)advantages (3)
A: - Slow calculation
- Capture effect of electronic structure
- Potentially information rich

Q: Types of QM descriptors (5)
A: - Steric
- Electronic
- Environment (eg. solvent)
- Global (Molecule, reaction, system)
- Local (Atoms, bonds, rings)

Q: Combining QM descriptors with deep learning (advantages, 2)
A: - Less data hungry:
- Generalize better:

Q: Ways to speed up QM descriptor calculations (2)
A: - Semi-empirical QM methods (based on HF, eg. MOPAC, xTB)
- Predict with ML

Q: Desirable properties physics based descriptors (4)
A: - Respect symmetries: Permutation, rotation, reflection, translation
- Completeness: Different structures \(\Rightarrow\) different vectors
- Smoothness: Smooth structural \(\Rightarrow\) smooth vector changes
- Property additivity

Q: SOAP
A: Smooth Overlap of Atomic Positions:
1. Gaussian on every atom
2. Construct neighbor density \(\rho_i(r)\) within cutoff \(r_{cut}\)
3. Transform \(\rho_i(r)\) to local basis of radial and angular functions
4. Construct symmetrized combination \(\Rightarrow\) power spectrum \(\equiv\) SOAP vector
from dscribe.descriptors import SOAP
soap = SOAP(species=["H", "O"], r_cut=6.0, n_max=1, l_max=1)
soap_mol = soap.create(mol)

Q: ACSF
A: Atom-Centered Symmetry Function
- Convert Cartesian coordinates to functions centered on atoms
- Functions \(G_i^n\) of increasing order n are radial or angular

Q: Python generate ACSF vectors of water from dscribe
A: acsf = ACSF(
    species=["H", "O"],
    g2_params=[[1, 1]],
    g4_params=[[1, 1, 1]],
    r_cut=6.0,
)
acsf_mol = acsf.create(mol)

Q: Create an optimized conformer ensemble using crest
A: First you need to generate an xyz file:
from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit.Chem.rdmolfiles import MolToXYZFile
# A function that generates a xyz file for a SMILES input
def smiles_to_xyz(smiles, output_filename):
    # Convert the SMILES string to a molecule object
    mol = Chem.MolFromSmiles(smiles)
    mol = Chem.AddHs(mol)  # Add hydrogens
    # Generate 3D coordinates
    AllChem.EmbedMolecule(mol, AllChem.ETKDG())
    AllChem.MMFFOptimizeMolecule(mol)  # Optimize the geometry
    # Write the molecule to an XYZ file
    MolToXYZFile(mol, output_filename)
    return None
Then run the optimization with crest (using fast force field calculation gfnff)
crest filename.xyz --alpb thf --gfn2//gfnff > stdout.txt
Usually we also want to sort the CE by energy:
from morfeus.conformer import ConformerEnsemble
# Read in conformer ensemble from CREST
ce_crest = ConformerEnsemble.from_crest("foldername")
# Sort conformer ensemble according to the conformer energy
ce_crest.sort()

Q: (Dis)advantages of using GFN-FF over GFN2 for conformer optimization
A: - Very fast
- A bit less accurate, but comparable
- New and sometimes a bit buggy