From 2ae639e7a1d15741a4422c959aa5ec48caef0081 Mon Sep 17 00:00:00 2001 From: Quarto GHA Workflow Runner Date: Wed, 13 Dec 2023 19:15:05 +0000 Subject: [PATCH] Built site for gh-pages --- .nojekyll | 2 +- examples/chemistry/excited_states.html | 6 + .../chemistry/qchem_modelling_basics.html | 6 + examples/fault_tolerant/qsp_state_prep.html | 6 + .../berylium_ibm_quantum.html | 6 + .../overview_endtoend.html | 6 + ...ist_cloud_hardware_experiments_braket.html | 6 + .../umbrella_inversion.html | 6 + examples/img/cluster_glycine.png | Bin 0 -> 58009 bytes examples/img/glycine_forms.png | Bin 0 -> 37960 bytes .../classical_shadows.html | 6 + examples/problem_decomposition/dmet.html | 6 + examples/problem_decomposition/dmet_uhf.html | 6 + .../problem_decomposition/ifci_mifno.html | 6 + examples/problem_decomposition/oniom.html | 6 + examples/problem_decomposition/qmmm.html | 974 ++++++++++++++++++ examples/variational_methods/adapt.html | 6 + .../iqcc_using_clifford.html | 6 + examples/variational_methods/vqe.html | 6 + .../vqe_custom_ansatz_hamiltonian.html | 6 + examples/workflow_basics/1.the_basics.html | 6 + .../workflow_basics/2.qpu_connection.html | 6 + .../workflow_basics/3.noisy_simulation.html | 6 + .../workflow_basics/symbolic_simulator.html | 6 + hands_on/T1_circuits.html | 6 + hands_on/T1_circuits_solved.html | 6 + hands_on/T2_simulators.html | 6 + hands_on/T2_simulators_solved.html | 6 + hands_on/T3_VQE.html | 6 + hands_on/T3_VQE_solved.html | 6 + hands_on/T4_hardware_experiments.html | 6 + hands_on/T4_hardware_experiments_solved.html | 6 + hands_on/T5_fault_tolerant_build_blocks.html | 6 + ...T5_fault_tolerant_build_blocks_solved.html | 6 + index.html | 7 + search.json | 37 +- sitemap.xml | 66 +- 37 files changed, 1233 insertions(+), 33 deletions(-) create mode 100644 examples/img/cluster_glycine.png create mode 100644 examples/img/glycine_forms.png create mode 100644 examples/problem_decomposition/qmmm.html diff --git a/.nojekyll b/.nojekyll index c92dff3..569169d 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -b9ab3096 \ No newline at end of file +17ecdf5e \ No newline at end of file diff --git a/examples/chemistry/excited_states.html b/examples/chemistry/excited_states.html index 12e8376..9e1d9eb 100644 --- a/examples/chemistry/excited_states.html +++ b/examples/chemistry/excited_states.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/chemistry/qchem_modelling_basics.html b/examples/chemistry/qchem_modelling_basics.html index 6eb0b4f..074399c 100644 --- a/examples/chemistry/qchem_modelling_basics.html +++ b/examples/chemistry/qchem_modelling_basics.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/fault_tolerant/qsp_state_prep.html b/examples/fault_tolerant/qsp_state_prep.html index 9c8adbf..9506a8b 100644 --- a/examples/fault_tolerant/qsp_state_prep.html +++ b/examples/fault_tolerant/qsp_state_prep.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/hardware_experiments/berylium_ibm_quantum.html b/examples/hardware_experiments/berylium_ibm_quantum.html index 56c7b94..c483905 100644 --- a/examples/hardware_experiments/berylium_ibm_quantum.html +++ b/examples/hardware_experiments/berylium_ibm_quantum.html @@ -269,6 +269,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/hardware_experiments/overview_endtoend.html b/examples/hardware_experiments/overview_endtoend.html index 9b4c967..0dc622b 100644 --- a/examples/hardware_experiments/overview_endtoend.html +++ b/examples/hardware_experiments/overview_endtoend.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/hardware_experiments/qemist_cloud_hardware_experiments_braket.html b/examples/hardware_experiments/qemist_cloud_hardware_experiments_braket.html index a0b6848..842220c 100644 --- a/examples/hardware_experiments/qemist_cloud_hardware_experiments_braket.html +++ b/examples/hardware_experiments/qemist_cloud_hardware_experiments_braket.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/hardware_experiments/umbrella_inversion.html b/examples/hardware_experiments/umbrella_inversion.html index f0ecf06..b0702fa 100644 --- a/examples/hardware_experiments/umbrella_inversion.html +++ b/examples/hardware_experiments/umbrella_inversion.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/img/cluster_glycine.png b/examples/img/cluster_glycine.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0f572e6d317e9c2d4dbde36f210c82a186acd7 GIT binary patch literal 58009 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 literal 0 HcmV?d00001 diff --git a/examples/img/glycine_forms.png b/examples/img/glycine_forms.png new file mode 100644 index 0000000000000000000000000000000000000000..c84fcdd9623c7b8fba7ca54cf4de938345f09468 GIT binary patch literal 37960 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 ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + +
diff --git a/examples/problem_decomposition/dmet.html b/examples/problem_decomposition/dmet.html index 53e3ee9..19376ed 100644 --- a/examples/problem_decomposition/dmet.html +++ b/examples/problem_decomposition/dmet.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/problem_decomposition/dmet_uhf.html b/examples/problem_decomposition/dmet_uhf.html index ea6ba57..985d774 100644 --- a/examples/problem_decomposition/dmet_uhf.html +++ b/examples/problem_decomposition/dmet_uhf.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/problem_decomposition/ifci_mifno.html b/examples/problem_decomposition/ifci_mifno.html index 8558ff3..fc4a7ab 100644 --- a/examples/problem_decomposition/ifci_mifno.html +++ b/examples/problem_decomposition/ifci_mifno.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/problem_decomposition/oniom.html b/examples/problem_decomposition/oniom.html index f143be5..d6b3ad8 100644 --- a/examples/problem_decomposition/oniom.html +++ b/examples/problem_decomposition/oniom.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/problem_decomposition/qmmm.html b/examples/problem_decomposition/qmmm.html new file mode 100644 index 0000000..7545d73 --- /dev/null +++ b/examples/problem_decomposition/qmmm.html @@ -0,0 +1,974 @@ + + + + + + + + + +The QM/MM method: Solvation of the Glycine Amino Acid + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ +
+ + +
+ + + +
+ +
+
+

The QM/MM method: Solvation of the Glycine Amino Acid

+
+ + + +
+ + + + +
+ + +
+ +
+

Introduction

+
+

Principles of the QM/MM method

+

In 2013, the Nobel Prize in Chemistry was awarded to Martin Karplus, Michael Levitt, and Arieh Warshel for their groundbreaking work in advancing the understanding of complex chemical systems. Their achievement was centered around the development of multiscale models, a significant milestone in the field of computational chemistry. Specifically, their work highlighted the QM/MM method, an abbreviation for Quantum Mechanics/Molecular Mechanics. Introduced in 1976 in the Journal of Molecular Biology, it amalgamates quantum mechanics, which describes the behavior of particles at the electronic level, with molecular mechanics, a classical approach that uses forcefields to model interatomic interactions. The introduction of this method became a cornerstone in biochemical simulation workflows, allowing scientists to simulate and understand complex chemical reactions occurring within biological contexts with remarkable accuracy. Its primary objective remains the reduction of computational cost in modeling intricate chemical systems, useful in the study of biochemical entities like DNA/RNA strands, proteins, and organic molecules.

+

Consider protein simulations as a case in point: the majority of proteins consist of 50 to 200 amino acids (source). With an average of approximately 19 atoms per amino acid, a solitary protein system might necessitate the consideration of anywhere between 950 to 3800 atoms. This estimate however does not take into account solvents, ions, and other vital molecular species that could be important in the simulation model.

+

This problem size is quite typical in many molecular mechanics workflows. Nonetheless, handling interactions like charge transfers or hydrogen bonds, which are pivotal in protein/drug interactions, can pose challenges when using forcefield-based methods. In such scenarios, the nuanced description of these molecular interactions is better represented via quantum mechanics. However, the problem size becomes intractable for quantum mechanics methods alone. Hence, the fusion of both realms has been beneficial for the computational chemistry community and forms the essence of the QM/MM approach.

+
+
+

Quantum mechanical methods

+

Molecules reside within the microscopic realm and adhere to the principles of the Schrödinger equation. For more introductory material on modeling molecular systems, please refer to our previous notebook.

+

Quantum computing research is rapidly advancing on both software and hardware fronts. Chemistry stands out as a promising application for these devices, propelling an active research field, exemplified further in the paper reviews by Kassal et al. and Cao et al.. Harnessing QM/MM methodologies within quantum computing simulations holds promise in capturing crucial environmental effects, such as solvent interactions, enriching the accuracy and realism of computational models [1, 2].

+
+
+

Computing solvation energies

+

We apply this approach to the explicit solvation of a simple amino acid (glycine) in water through electrostatic embedding. To determine solvation energies for chemical compounds, the following steps are taken in this notebook: 1. Compute the molecular energies of isolated compounds using a quantum algorithm. For the sake of simplicity, the quantum algorithm used here is the Variational Quantum Eigensolver (VQE). Other quantum solvers available in Tangelo have already been or can be integrated with QM/MM. 2. Calculate the molecular energies of solvated compounds. In this step, the QM/MM problem decomposition method models the glycine amino acid using VQE, similar to the previous step. Meanwhile, explicit water molecules are modeled through molecular mechanics. 3. Determine the energy differences that signify solvation energy. A more negative energy denotes a stronger interaction between the solvent and the molecule.

+
+
+
+

Use-case: Solvation of the glycine animo acid

+
+

Preparation for the notebook

+

The next cells ensure that the appropriate packages are installed and imported into the Python environment to successfully execute this notebook.

+
+
try:
+    import tangelo
+except ModuleNotFoundError:
+    !pip install git+https://github.com/goodchemistryco/Tangelo.git@develop --quiet
+    !pip install qulacs pyscf rdkit openbabel-wheel --quiet
+
+
+
# Tangelo common imports.
+from tangelo import SecondQuantizedMolecule
+from tangelo.algorithms.variational import VQESolver, BuiltInAnsatze
+from tangelo.toolboxes.molecular_computation.frozen_orbitals import get_orbitals_excluding_homo_lumo
+from tangelo.toolboxes.molecular_computation.molecule import atom_string_to_list
+
+# QM/MM-related imports.
+from tangelo.problem_decomposition.qmmm.qmmm_problem_decomposition import QMMMProblemDecomposition
+from tangelo.problem_decomposition.oniom._helpers.helper_classes import Fragment, Link
+from tangelo.toolboxes.molecular_computation.mm_charges_solver import MMChargesSolverRDKit
+
+# Basis set used in this notebook.
+basis = "cc-pvdz"
+
+# Constants.
+ha_to_kcalmol = 627.509
+cal_to_j = 4.184
+
+
+
+

Amino acid tautomers

+

Amino acids form the basic building blocks of polypeptides and proteins within living organisms. While nature encompasses about 500 variations, only 22 are encoded in the genetic blueprint of life. These molecules are characterized by their end-capping functional groups: an amine (NH\(_3\)) and a carboxylic acid (COOH), with a central functional group denoted as ‘R’ that defines the unique properties of each amino acid.

+

This notebook primarily focuses on employing computational techniques that integrate quantum mechanics with molecular mechanics (QM/MM). This method allows researchers to explore interactions among molecules within aqueous solutions, providing essential insights into the behaviors and functionalities of proteins at a reasonable computational cost.

+

Our initial step involves defining the atomic coordinates of glycine, the simplest amino acid with a ‘R’ functional group consisting solely of a hydrogen atom. Given the extensive computational requirements for running a full quantum algorithm on the entire system, this notebook opts to freeze certain molecular orbitals, therefore simplifying the simulation to manage its complexity.

+
+
xyz_glycine = """
+  C          2.05388        0.61558        0.07379
+  O          1.96483       -0.57096       -0.21241
+  O          3.19750        1.18239        0.43269
+  H          3.96112        0.54040        0.42260
+  C          0.91678        1.61052        0.03784
+  H          0.94914        2.17916        0.95644
+  H          1.13065        2.30136       -0.76945
+  N         -0.39578        0.99717       -0.14991
+  H         -0.70125        0.48980        0.67086
+  H         -0.41063        0.36439       -0.94717
+"""
+
+# Creating a molecule object from the coordinates.
+glycine = SecondQuantizedMolecule(xyz_glycine, basis=basis)
+
+# Setting the active space to HOMO-1 to LUMO+1.
+frozen_orbitals_gly = get_orbitals_excluding_homo_lumo(glycine, homo_minus_n=1, lumo_plus_n=1)
+glycine.freeze_mos(frozen_orbitals_gly, inplace=True)
+print(f"The neutral form of GLY will be described by an active space of {glycine.n_active_mos} molecular orbitals and {glycine.n_active_electrons} electrons.")
+
+
The neutral form of GLY will be described by an active space of 4 molecular orbitals and 4 electrons.
+
+
+

One might wonder why this amino acid dissolves in water despite being a neutral organic compound. The reason lies in its behavior when in water; evidences show that amino acids adopt a zwitterionic form [3-6]. Although the entire molecule remains electrically neutral, a hydrogen atom shifts from the carboxylic acid group to the amine group, showcasing a form of tautomerism. Thus, to precisely model the interaction of water with glycine, it is crucial to include the equivalent tautomer in the calculations of solvation properties.

+

In the next cell, we construct this chemical structure while using the same approach of freezing certain molecular orbitals.

+
+
xyz_zwitterion = """
+  C         -0.72588       -0.48930       -0.87995
+  O         -0.40429       -0.99901        0.24400
+  O         -1.71249       -0.74617       -1.57606
+  C          0.24065        0.58647       -1.40746
+  H          0.94067        0.15610       -2.10976
+  H         -0.32329        1.37177       -1.87959
+  N          0.99940        1.14332       -0.24215
+  H          1.19967        0.36262        0.37817
+  H          1.91733        1.52621       -0.51811
+  H          0.35328        1.80600        0.26884
+"""
+
+# Creating a molecule object from the coordinates.
+zwitterion = SecondQuantizedMolecule(xyz_zwitterion, basis=basis)
+
+# Setting the active space to HOMO-1 to LUMO+1.
+frozen_orbitals_zwit = get_orbitals_excluding_homo_lumo(zwitterion, homo_minus_n=1, lumo_plus_n=1)
+zwitterion.freeze_mos(frozen_orbitals_zwit)
+print(f"The zwitterion form of GLY will be described by an active space of {zwitterion.n_active_mos} molecular orbitals and {zwitterion.n_active_electrons} electrons.")
+
+
The zwitterion form of GLY will be described by an active space of 4 molecular orbitals and 4 electrons.
+
+
+

With the molecules now encoded as Tangelo objects, we’re ready to perform quantum chemistry calculations. Below is a visual representation illustrating the two distinct tautomers of the glycine amino acid that we previously constructed.

+
+
+

+
Glycine forms
+
+
+
+
+

Using quantum algorithms on the glycine molecule

+

The following code cell defines the options passed to our quantum solver (for simplicity, the well-known Variational Quantum Eigensolver (VQE) with a UCCSD ansatz). These settings are applied in subsequent energy computations.

+
+
vqe_options= {
+    "ansatz": BuiltInAnsatze.UCCSD,
+    "qubit_mapping": "scBK",
+    "up_then_down": True
+ }
+
+

We then run the quantum solver for both forms of glycine. We are particularly interested in the total molecular energies obtained, as they are necessary to calculate the hydration energy later on (see step 1 outlined in the “Computing solvation energies” section above).

+
+
quantum_solver_gly = VQESolver({"molecule": glycine, **vqe_options})
+quantum_solver_gly.build()
+e_quantum_gly = quantum_solver_gly.simulate()
+print(f"The gas phase molecular energy of glycine (neutral) is {e_quantum_gly:.5f} Ha.")
+
+
The gas phase molecular energy of glycine (neutral) is -282.85661 Ha.
+
+
+
+
quantum_solver_zwit = VQESolver({"molecule": zwitterion, **vqe_options})
+quantum_solver_zwit.build()
+e_quantum_zwit = quantum_solver_zwit.simulate()
+print(f"The gas phase molecular energy of glycine (zwitterion) is {e_quantum_zwit:.5f} Ha.")
+
+
The gas phase molecular energy of glycine (zwitterion) is -282.79736 Ha.
+
+
+

Since tautomers have the same set of atoms, comparing the two molecular energies indicates that the neutral form of the glycine amino acid is more stable than the zwitterion. This outcome aligns with the fact that formal charges on atoms in the gas phase are difficult to generate due to the lack of an environment for stabilization.

+

We now have access to the molecular energies of each tautomer. We now sample the energy of the molecular system consisting of a cluster of water around the molecules (see step 2 outlined in the “Computing solvation energies” section above). The energy differences \(\Delta E_{\text{solv}}\) (after removing the water molecule potential energy contributions) should be proportional to the free energies of solvation \(\Delta H_{\text{solv}}\) or \(\Delta G_{\text{solv}}\) measured in laboratories.

+

The remaining steps taken in this notebook are revolving around computing the molecular energies of those clusters using the QM/MM method, which is a simplified version of a more complete study as reported in [7].

+
+
+

Preparing the QM/MM calculation: get the partial charges for \(H_2O\)

+

The supported QM/MM framework in Tangelo needs the partial charges for the part of the system described via molecular mechanics. This is what we do in the next code cell. Here, in summary: - A mean-field calculation is performed for a single water molecule; - The Mulliken atomic charges are retrived from the analyze method; - A function is defined to construct an array in the [(partial_charge, (x, y, z)), ...] format.

+
+
xyz_h2o = """
+  O         -2.08448       -2.25652       -0.22848
+  H         -2.35312       -3.17615       -0.12238
+  H         -1.83562       -1.85666        0.64078
+"""
+
+h2o = SecondQuantizedMolecule(xyz_h2o, basis=basis)
+(_, mulliken_atomic_charges), _ = h2o.mean_field.analyze()
+
+def get_charges(water_molecule_coords):
+    xyz_h2os = atom_string_to_list(water_molecule_coords)
+    mulliken_charges_waters = [*mulliken_atomic_charges] * (len(xyz_h2os) // len(mulliken_atomic_charges))
+
+    return [(q, xyz_h2os[i][1]) for i, q in enumerate(mulliken_charges_waters)]
+
+print(f"The Mulliken partial charges computed from an Hartree-Fock calculation in {basis} are\nO = {mulliken_atomic_charges[0]}\nH1 = {mulliken_atomic_charges[1]}\nH2 = {mulliken_atomic_charges[2]}.")
+
+
The Mulliken partial charges computed from an Hartree-Fock calculation in cc-pvdz are
+O = -0.6346652155730794
+H1 = 0.3194372332962432
+H2 = 0.31522798227682913.
+
+
+
+
+

Computing the solvation energies using QM/MM with charge embedding

+

The next task involves computing solvated molecule energies using the QM/MM electrostatic embedding method. Using the previously calculated water atomic charges, the QMMMProblemDecomposition class consolidates necessary information for this calculation. This includes: - “geometry”: Coordinates of the molecule in a list format. - “mmpackage”: Molecular mechanics package utilized. - “charges”: Electrostatic charges and their coordinates. - “qmfragment”: A Fragment object defining the solver and related options for computing the molecular energy in quantum mechanics.

+

It’s worth noting the various methods available for generating water cluster geometries. The following geometries were created by randomly positioning three water molecules around each terminal and subsequently optimized using the AMBER94 force field. This optimization step can be done with any molecular mechanics package, like OpenMM or RDKit. An illustration showcasing one of the generated conformations is presented in the figure below.

+
+
+

+
Cluster of water molecules and glycine
+
+
+
+
xyz_waters_gly = """
+  O         -2.08448       -2.25652       -0.22848
+  H         -2.35312       -3.17615       -0.12238
+  H         -1.83562       -1.85666        0.64078
+  O         -0.29165       -1.17766       -1.97014
+  H          0.55770       -1.31516       -1.52416
+  H         -0.98020       -1.66830       -1.47470
+  O          4.62948       -0.92998        0.20740
+  H          5.09272       -1.49221        0.83838
+  H          3.79167       -1.33448       -0.07876
+  O         -2.80676        2.14474       -0.62525
+  H         -1.85118        1.90309       -0.45829
+  H         -2.93359        2.38421       -1.55080
+  O         -1.81568       -0.72927        1.87434
+  H         -1.84048       -0.80009        2.83473
+  H         -2.66617       -0.33065        1.49202
+  O         -3.76770        0.00135        0.46835
+  H         -3.57200        0.87852        0.03795
+  H         -3.59648       -0.71670       -0.16049
+"""
+
+qmmm_model_gly = QMMMProblemDecomposition({
+    "geometry": atom_string_to_list(xyz_glycine),
+    "mmpackage": "rdkit",
+    "charges": get_charges(xyz_waters_gly),
+    "qmfragment": Fragment(solver_high="vqe",
+        options_high={"basis": basis, "frozen_orbitals": frozen_orbitals_gly, **vqe_options})
+})
+
+e_qmmm_gly = qmmm_model_gly.simulate()
+print(f"The hydration energy for glycine (neutral) is {(e_qmmm_gly-e_quantum_gly) * ha_to_kcalmol * cal_to_j:5.0f} kJ/mol.")
+
+
The hydration energy for glycine (neutral) is  -136 kJ/mol.
+
+
+
+
xyz_waters_zwit = """
+  O         -2.33478        0.43459        1.56814
+  H         -1.65671       -0.25663        1.45580
+  H         -3.11977        0.14754        1.04111
+  O          3.57502        1.26874       -0.76381
+  H          3.59649        0.47309       -0.17203
+  H          4.40577        1.75433       -0.74479
+  O         -0.93902        2.44112        0.89259
+  H         -1.06155        3.25709        1.38776
+  H         -1.58516        1.71621        1.19305
+  O         -3.99606       -0.58515       -0.21107
+  H         -4.64697       -0.10084       -0.73262
+  H         -3.23854       -0.83634       -0.78921
+  O          3.12434       -0.68537        0.90701
+  H          3.33270       -0.62390        1.84641
+  H          2.63054       -1.54344        0.73112
+  O          1.55389       -2.64818        0.61476
+  H          0.69747       -2.15400        0.51558
+  H          1.54074       -3.48659        0.14319
+"""
+
+qmmm_model_zwit = QMMMProblemDecomposition({
+    "geometry": atom_string_to_list(xyz_zwitterion),
+    "mmpackage": "rdkit",
+    "charges": get_charges(xyz_waters_zwit),
+    "qmfragment": Fragment(solver_high="vqe",
+        options_high={"basis": basis, "frozen_orbitals": frozen_orbitals_zwit, **vqe_options})
+})
+
+e_qmmm_zwit = qmmm_model_zwit.simulate()
+print(f"The hydration energy for glycine (zwitterion) is {(e_qmmm_gly-e_quantum_zwit) * ha_to_kcalmol * cal_to_j:5.0f} kJ/mol.")
+
+
The hydration energy for glycine (zwitterion) is  -292 kJ/mol.
+
+
+

It’s important to note that we haven’t deducted the potential energy contribution of water molecules. This omission is intentional based on the PySCF backend used in this study, as outlined in its QM/MM documentation. In PySCF’s implementation, the calculated total energy doesn’t include the static Coulomb interactions of MM point charges, MM energy, vdw interaction, or other bonding/non-bonding effects between QM and MM particles. Tangelo supports other chemistry backends, including Psi4, and users should refer to the relevant backend documentation to confirm energy contributions and understand the output.

+

The results indicate negative energy differences, suggesting stabilization for both forms of the glycine amino acid in aqueous solutions. Experimental \(\Delta H_{\text{solv}}\) is approximately 122 kJ/mol (Russian Journal of General Chemistry, 2008, 78, 6, 1155 - 1160). While we’re not directly computing free energy differences (for example, we didn’t include entropic effects), our results fall within a similar order of magnitude. Notably, the zwitterion form exhibits enhanced stabilization by the water shell, attributed to water’s polar nature, which enhances its ability to solvate polar molecules.

+
+
+
+

Closing words

+

This notebook serves as an introductory exploration of the QM/MM method applied to biochemical systems within aqueous environments, demonstrating how quantum algorithms in Tangelo can be applied to such applications.

+

By examining glycine tautomers and stability differences, it showcases the potential of QM/MM for studying solvated systems. We demonstrated that QM/MM + VQE calculations are able to show both forms of the glycine amino acid are stabilized in aqueous solutions. Although we didn’t directly compute free energy differences, our results roughly align with experimental data, notably indicating the zwitterion’s enhanced stabilization by the water shell due to water’s inherent polarity.

+

Like other problem decomposition techniques available in Tangelo (ONIOM, DMET, etc), the QM/MM implementation gives users the freedom to select and integrate quantum algorithms tailored to their research needs. In this tutorial, we simply used VQE as the fragment solver, but the QM/MM method can be paired with other quantum or classical solvers in Tangelo. Users can tailor quantum algorithms to their biochemical systems, optimizing their computational approach based on the nature and complexity of the problem at hand.

+

What will you do with QM/MM and Tangelo ?

+
+
+

References

+
    +
  1. Liu, H.; Low, G.H.; Steiger, D.S.; Häner, T.; Reiher, M.; Troyer, M. Prospects of quantum computing for molecular sciences. Materials Theory. 2022, 6, 11.
  2. +
  3. Izsák, R.; Riplinger, C.; Blunt, N.S.; de Souza, D.; Holzmann, N.; Crawford, O.; Camps, J.; Neese, F.; Schopf, P. Quantum computing in pharma: A multilayer embedding approach for near future applications. J. Comput. Chem. 2023, 44(3), 406.
  4. +
  5. Jensen, J.H.; Gordon, M.S. On the Number of Water Molecules Necessary To Stabilize the Glycine Zwitterion. J. Am. Chem. Soc. 1995, 117, 8159-8170.
  6. +
  7. Fernandez-Ramos, A.; Smedarchina, Z.; Siebrand, W.; Zgierski, M.Z. A direct-dynamics study of the zwitterion-to-neutral interconversion of glycine in aqueous solution. J. Chem. Phys. 2000, 113, 9714-9721.
  8. +
  9. Valverde, D.; da Costa Ludwig, Z.M.; da Costa, C.R.; Ludwig, V.; Georg, H. C. Zwitterionization of glycine in water environment: Stabilization mechanism and NMR spectral signatures. J. Chem. Phys. 2018, 148, 024305.
  10. +
  11. Bhate, M.P.; Woodard, J.C.; Mehta M.A. Solvation and Hydrogen Bonding in Alanine- and Glycine-Containing Dipeptides Probed Using Solution- and Solid-State NMR Spectroscopy. J. Am. Chem. Soc. 2009, 131, 27, 9579-9589.
  12. +
  13. Takenaka, N.; Kitamura, Y.; Koyano, Y.; Asada, T.; Nagaoka, M. Reaction path optimization and vibrational frequency analysis via ab initio QM/MM free energy gradient (FEG) method: Application to isomerization process of glycine in aqueous solution. Theor. Chem. Acc. 2011, 130, 215-226.
  14. +
+ + +
+ +
+ +
+ + + + \ No newline at end of file diff --git a/examples/variational_methods/adapt.html b/examples/variational_methods/adapt.html index 1fecf3d..a04bc2f 100644 --- a/examples/variational_methods/adapt.html +++ b/examples/variational_methods/adapt.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/variational_methods/iqcc_using_clifford.html b/examples/variational_methods/iqcc_using_clifford.html index a3fa28e..4e53069 100644 --- a/examples/variational_methods/iqcc_using_clifford.html +++ b/examples/variational_methods/iqcc_using_clifford.html @@ -269,6 +269,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/variational_methods/vqe.html b/examples/variational_methods/vqe.html index a81c44f..c401036 100644 --- a/examples/variational_methods/vqe.html +++ b/examples/variational_methods/vqe.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/variational_methods/vqe_custom_ansatz_hamiltonian.html b/examples/variational_methods/vqe_custom_ansatz_hamiltonian.html index 1de5d82..49e22d1 100644 --- a/examples/variational_methods/vqe_custom_ansatz_hamiltonian.html +++ b/examples/variational_methods/vqe_custom_ansatz_hamiltonian.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/workflow_basics/1.the_basics.html b/examples/workflow_basics/1.the_basics.html index 130f4d1..efcb203 100644 --- a/examples/workflow_basics/1.the_basics.html +++ b/examples/workflow_basics/1.the_basics.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/workflow_basics/2.qpu_connection.html b/examples/workflow_basics/2.qpu_connection.html index c56b0b5..1bf4ffa 100644 --- a/examples/workflow_basics/2.qpu_connection.html +++ b/examples/workflow_basics/2.qpu_connection.html @@ -274,6 +274,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/workflow_basics/3.noisy_simulation.html b/examples/workflow_basics/3.noisy_simulation.html index 4c8dfd7..11f2e40 100644 --- a/examples/workflow_basics/3.noisy_simulation.html +++ b/examples/workflow_basics/3.noisy_simulation.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/examples/workflow_basics/symbolic_simulator.html b/examples/workflow_basics/symbolic_simulator.html index b407a0a..669096c 100644 --- a/examples/workflow_basics/symbolic_simulator.html +++ b/examples/workflow_basics/symbolic_simulator.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T1_circuits.html b/hands_on/T1_circuits.html index 1c1ca6a..e930c45 100644 --- a/hands_on/T1_circuits.html +++ b/hands_on/T1_circuits.html @@ -269,6 +269,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T1_circuits_solved.html b/hands_on/T1_circuits_solved.html index c2ba2df..a3cef2f 100644 --- a/hands_on/T1_circuits_solved.html +++ b/hands_on/T1_circuits_solved.html @@ -269,6 +269,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T2_simulators.html b/hands_on/T2_simulators.html index bcb7d9e..2cd8233 100644 --- a/hands_on/T2_simulators.html +++ b/hands_on/T2_simulators.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T2_simulators_solved.html b/hands_on/T2_simulators_solved.html index ca05e4a..7e16b4a 100644 --- a/hands_on/T2_simulators_solved.html +++ b/hands_on/T2_simulators_solved.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T3_VQE.html b/hands_on/T3_VQE.html index d5ff311..6f02530 100644 --- a/hands_on/T3_VQE.html +++ b/hands_on/T3_VQE.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T3_VQE_solved.html b/hands_on/T3_VQE_solved.html index 53702c9..4d2355e 100644 --- a/hands_on/T3_VQE_solved.html +++ b/hands_on/T3_VQE_solved.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T4_hardware_experiments.html b/hands_on/T4_hardware_experiments.html index 7f75138..20fc24a 100644 --- a/hands_on/T4_hardware_experiments.html +++ b/hands_on/T4_hardware_experiments.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T4_hardware_experiments_solved.html b/hands_on/T4_hardware_experiments_solved.html index ebc7eab..653c66d 100644 --- a/hands_on/T4_hardware_experiments_solved.html +++ b/hands_on/T4_hardware_experiments_solved.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T5_fault_tolerant_build_blocks.html b/hands_on/T5_fault_tolerant_build_blocks.html index e349a25..4047f0b 100644 --- a/hands_on/T5_fault_tolerant_build_blocks.html +++ b/hands_on/T5_fault_tolerant_build_blocks.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/hands_on/T5_fault_tolerant_build_blocks_solved.html b/hands_on/T5_fault_tolerant_build_blocks_solved.html index 641935c..ea57477 100644 --- a/hands_on/T5_fault_tolerant_build_blocks_solved.html +++ b/hands_on/T5_fault_tolerant_build_blocks_solved.html @@ -271,6 +271,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + diff --git a/index.html b/index.html index eba776a..1deb2cf 100644 --- a/index.html +++ b/index.html @@ -235,6 +235,12 @@ ONIOM Problem Decomposition - A use case for an acetic acid molecule in water + + @@ -428,6 +434,7 @@
  • DMET Unrestricted Hartree-Fock
  • iFCI - MIFNO
  • ONIOM
  • +
  • QMMM
  • Hardware Experiments
      diff --git a/search.json b/search.json index d0d1162..de78f25 100644 --- a/search.json +++ b/search.json @@ -123,7 +123,7 @@ "href": "index.html", "title": "", "section": "", - "text": "Welcome !\nThis website contains the jupyter notebooks for Tangelo. This includes tutorial notebooks and research-related notebooks. Anyone can contribute a notebook to the repository!\nIf you are new to Tangelo, we suggest you start with 1. The basics, and Quantum Chemistry Basics. After that, what you are most interested in determines where you go next !\nThere are multiple ways to run and play with these notebooks: through Binder, Google Colab, a local install (…).\nAn overview of the many notebooks so far (there may be more, including example scripts as well):\n\nWorkflow Basics\n\n1. The basics\n2. QPU Connection\n3. Noisy Simulation\nSymbolic Simulation\n\nChemistry\n\nQuantum Chemistry Basics\nExcited State methods\n\nVariational Methods\n\nVQE\nVQE with user defined ansatz\nAdapt VQE Solver\nIterative Qubit Coupled Cluster using only Clifford Circuits\n\nMeasurement Reduction\n\nClassical Shadows\n\nProblem Decomposition\n\nDensity Matrix Embedding Theory\nDMET Unrestricted Hartree-Fock\niFCI - MIFNO\nONIOM\n\nHardware Experiments\n\nEnd-to-End hardware experiment\nHardware Experiment using QEMIST Cloud\nBerylium IBM quantum experiment\nUmbrella inversion Braket\n\nFault Tolerant\n\nState Preparation using Quantum Signal Processing" + "text": "Welcome !\nThis website contains the jupyter notebooks for Tangelo. This includes tutorial notebooks and research-related notebooks. Anyone can contribute a notebook to the repository!\nIf you are new to Tangelo, we suggest you start with 1. The basics, and Quantum Chemistry Basics. After that, what you are most interested in determines where you go next !\nThere are multiple ways to run and play with these notebooks: through Binder, Google Colab, a local install (…).\nAn overview of the many notebooks so far (there may be more, including example scripts as well):\n\nWorkflow Basics\n\n1. The basics\n2. QPU Connection\n3. Noisy Simulation\nSymbolic Simulation\n\nChemistry\n\nQuantum Chemistry Basics\nExcited State methods\n\nVariational Methods\n\nVQE\nVQE with user defined ansatz\nAdapt VQE Solver\nIterative Qubit Coupled Cluster using only Clifford Circuits\n\nMeasurement Reduction\n\nClassical Shadows\n\nProblem Decomposition\n\nDensity Matrix Embedding Theory\nDMET Unrestricted Hartree-Fock\niFCI - MIFNO\nONIOM\nQMMM\n\nHardware Experiments\n\nEnd-to-End hardware experiment\nHardware Experiment using QEMIST Cloud\nBerylium IBM quantum experiment\nUmbrella inversion Braket\n\nFault Tolerant\n\nState Preparation using Quantum Signal Processing" }, { "objectID": "examples/chemistry/qchem_modelling_basics.html", @@ -468,6 +468,41 @@ "section": "Closing words", "text": "Closing words\nThis feature allows us to bring together the state-of-the-art MI problem decomposition schemes available at scale in QEMIST cloud, and quantum workflows written with Tangelo. It facilitates exploring larger, more industrially-relevant use cases with a combination of classical and quantum workflows of your choice, on subproblems that are more ammenable to current devices.\nBoth iFCI and MI-FNO implement the method of increments. They differ in how they truncate the virtual orbital space (SNO vs FNO) and the inclusion of a correction factor for MI-FNO fragments (which is not required for iFCI fragments).\nFor now, this exploration is manual, as we believe the current state of the field does not benefit from a fully automated and streamlined platform… yet! In the future, platforms such as QEMIST Cloud will be able to directly use Tangelo to run entire workflows on cloud infrastructure, using both quantum and classical devices.\nMaybe your discoveries can contribute to advancing the field, and bring that future a bit sooner.\nWhat will you do with Tangelo?" }, + { + "objectID": "examples/problem_decomposition/qmmm.html", + "href": "examples/problem_decomposition/qmmm.html", + "title": "The QM/MM method: Solvation of the Glycine Amino Acid", + "section": "", + "text": "In 2013, the Nobel Prize in Chemistry was awarded to Martin Karplus, Michael Levitt, and Arieh Warshel for their groundbreaking work in advancing the understanding of complex chemical systems. Their achievement was centered around the development of multiscale models, a significant milestone in the field of computational chemistry. Specifically, their work highlighted the QM/MM method, an abbreviation for Quantum Mechanics/Molecular Mechanics. Introduced in 1976 in the Journal of Molecular Biology, it amalgamates quantum mechanics, which describes the behavior of particles at the electronic level, with molecular mechanics, a classical approach that uses forcefields to model interatomic interactions. The introduction of this method became a cornerstone in biochemical simulation workflows, allowing scientists to simulate and understand complex chemical reactions occurring within biological contexts with remarkable accuracy. Its primary objective remains the reduction of computational cost in modeling intricate chemical systems, useful in the study of biochemical entities like DNA/RNA strands, proteins, and organic molecules.\nConsider protein simulations as a case in point: the majority of proteins consist of 50 to 200 amino acids (source). With an average of approximately 19 atoms per amino acid, a solitary protein system might necessitate the consideration of anywhere between 950 to 3800 atoms. This estimate however does not take into account solvents, ions, and other vital molecular species that could be important in the simulation model.\nThis problem size is quite typical in many molecular mechanics workflows. Nonetheless, handling interactions like charge transfers or hydrogen bonds, which are pivotal in protein/drug interactions, can pose challenges when using forcefield-based methods. In such scenarios, the nuanced description of these molecular interactions is better represented via quantum mechanics. However, the problem size becomes intractable for quantum mechanics methods alone. Hence, the fusion of both realms has been beneficial for the computational chemistry community and forms the essence of the QM/MM approach.\n\n\n\nMolecules reside within the microscopic realm and adhere to the principles of the Schrödinger equation. For more introductory material on modeling molecular systems, please refer to our previous notebook.\nQuantum computing research is rapidly advancing on both software and hardware fronts. Chemistry stands out as a promising application for these devices, propelling an active research field, exemplified further in the paper reviews by Kassal et al. and Cao et al.. Harnessing QM/MM methodologies within quantum computing simulations holds promise in capturing crucial environmental effects, such as solvent interactions, enriching the accuracy and realism of computational models [1, 2].\n\n\n\nWe apply this approach to the explicit solvation of a simple amino acid (glycine) in water through electrostatic embedding. To determine solvation energies for chemical compounds, the following steps are taken in this notebook: 1. Compute the molecular energies of isolated compounds using a quantum algorithm. For the sake of simplicity, the quantum algorithm used here is the Variational Quantum Eigensolver (VQE). Other quantum solvers available in Tangelo have already been or can be integrated with QM/MM. 2. Calculate the molecular energies of solvated compounds. In this step, the QM/MM problem decomposition method models the glycine amino acid using VQE, similar to the previous step. Meanwhile, explicit water molecules are modeled through molecular mechanics. 3. Determine the energy differences that signify solvation energy. A more negative energy denotes a stronger interaction between the solvent and the molecule." + }, + { + "objectID": "examples/problem_decomposition/qmmm.html#introduction", + "href": "examples/problem_decomposition/qmmm.html#introduction", + "title": "The QM/MM method: Solvation of the Glycine Amino Acid", + "section": "", + "text": "In 2013, the Nobel Prize in Chemistry was awarded to Martin Karplus, Michael Levitt, and Arieh Warshel for their groundbreaking work in advancing the understanding of complex chemical systems. Their achievement was centered around the development of multiscale models, a significant milestone in the field of computational chemistry. Specifically, their work highlighted the QM/MM method, an abbreviation for Quantum Mechanics/Molecular Mechanics. Introduced in 1976 in the Journal of Molecular Biology, it amalgamates quantum mechanics, which describes the behavior of particles at the electronic level, with molecular mechanics, a classical approach that uses forcefields to model interatomic interactions. The introduction of this method became a cornerstone in biochemical simulation workflows, allowing scientists to simulate and understand complex chemical reactions occurring within biological contexts with remarkable accuracy. Its primary objective remains the reduction of computational cost in modeling intricate chemical systems, useful in the study of biochemical entities like DNA/RNA strands, proteins, and organic molecules.\nConsider protein simulations as a case in point: the majority of proteins consist of 50 to 200 amino acids (source). With an average of approximately 19 atoms per amino acid, a solitary protein system might necessitate the consideration of anywhere between 950 to 3800 atoms. This estimate however does not take into account solvents, ions, and other vital molecular species that could be important in the simulation model.\nThis problem size is quite typical in many molecular mechanics workflows. Nonetheless, handling interactions like charge transfers or hydrogen bonds, which are pivotal in protein/drug interactions, can pose challenges when using forcefield-based methods. In such scenarios, the nuanced description of these molecular interactions is better represented via quantum mechanics. However, the problem size becomes intractable for quantum mechanics methods alone. Hence, the fusion of both realms has been beneficial for the computational chemistry community and forms the essence of the QM/MM approach.\n\n\n\nMolecules reside within the microscopic realm and adhere to the principles of the Schrödinger equation. For more introductory material on modeling molecular systems, please refer to our previous notebook.\nQuantum computing research is rapidly advancing on both software and hardware fronts. Chemistry stands out as a promising application for these devices, propelling an active research field, exemplified further in the paper reviews by Kassal et al. and Cao et al.. Harnessing QM/MM methodologies within quantum computing simulations holds promise in capturing crucial environmental effects, such as solvent interactions, enriching the accuracy and realism of computational models [1, 2].\n\n\n\nWe apply this approach to the explicit solvation of a simple amino acid (glycine) in water through electrostatic embedding. To determine solvation energies for chemical compounds, the following steps are taken in this notebook: 1. Compute the molecular energies of isolated compounds using a quantum algorithm. For the sake of simplicity, the quantum algorithm used here is the Variational Quantum Eigensolver (VQE). Other quantum solvers available in Tangelo have already been or can be integrated with QM/MM. 2. Calculate the molecular energies of solvated compounds. In this step, the QM/MM problem decomposition method models the glycine amino acid using VQE, similar to the previous step. Meanwhile, explicit water molecules are modeled through molecular mechanics. 3. Determine the energy differences that signify solvation energy. A more negative energy denotes a stronger interaction between the solvent and the molecule." + }, + { + "objectID": "examples/problem_decomposition/qmmm.html#use-case-solvation-of-the-glycine-animo-acid", + "href": "examples/problem_decomposition/qmmm.html#use-case-solvation-of-the-glycine-animo-acid", + "title": "The QM/MM method: Solvation of the Glycine Amino Acid", + "section": "Use-case: Solvation of the glycine animo acid", + "text": "Use-case: Solvation of the glycine animo acid\n\nPreparation for the notebook\nThe next cells ensure that the appropriate packages are installed and imported into the Python environment to successfully execute this notebook.\n\ntry:\n import tangelo\nexcept ModuleNotFoundError:\n !pip install git+https://github.com/goodchemistryco/Tangelo.git@develop --quiet\n !pip install qulacs pyscf rdkit openbabel-wheel --quiet\n\n\n# Tangelo common imports.\nfrom tangelo import SecondQuantizedMolecule\nfrom tangelo.algorithms.variational import VQESolver, BuiltInAnsatze\nfrom tangelo.toolboxes.molecular_computation.frozen_orbitals import get_orbitals_excluding_homo_lumo\nfrom tangelo.toolboxes.molecular_computation.molecule import atom_string_to_list\n\n# QM/MM-related imports.\nfrom tangelo.problem_decomposition.qmmm.qmmm_problem_decomposition import QMMMProblemDecomposition\nfrom tangelo.problem_decomposition.oniom._helpers.helper_classes import Fragment, Link\nfrom tangelo.toolboxes.molecular_computation.mm_charges_solver import MMChargesSolverRDKit\n\n# Basis set used in this notebook.\nbasis = \"cc-pvdz\"\n\n# Constants.\nha_to_kcalmol = 627.509\ncal_to_j = 4.184\n\n\n\nAmino acid tautomers\nAmino acids form the basic building blocks of polypeptides and proteins within living organisms. While nature encompasses about 500 variations, only 22 are encoded in the genetic blueprint of life. These molecules are characterized by their end-capping functional groups: an amine (NH\\(_3\\)) and a carboxylic acid (COOH), with a central functional group denoted as ‘R’ that defines the unique properties of each amino acid.\nThis notebook primarily focuses on employing computational techniques that integrate quantum mechanics with molecular mechanics (QM/MM). This method allows researchers to explore interactions among molecules within aqueous solutions, providing essential insights into the behaviors and functionalities of proteins at a reasonable computational cost.\nOur initial step involves defining the atomic coordinates of glycine, the simplest amino acid with a ‘R’ functional group consisting solely of a hydrogen atom. Given the extensive computational requirements for running a full quantum algorithm on the entire system, this notebook opts to freeze certain molecular orbitals, therefore simplifying the simulation to manage its complexity.\n\nxyz_glycine = \"\"\"\n C 2.05388 0.61558 0.07379\n O 1.96483 -0.57096 -0.21241\n O 3.19750 1.18239 0.43269\n H 3.96112 0.54040 0.42260\n C 0.91678 1.61052 0.03784\n H 0.94914 2.17916 0.95644\n H 1.13065 2.30136 -0.76945\n N -0.39578 0.99717 -0.14991\n H -0.70125 0.48980 0.67086\n H -0.41063 0.36439 -0.94717\n\"\"\"\n\n# Creating a molecule object from the coordinates.\nglycine = SecondQuantizedMolecule(xyz_glycine, basis=basis)\n\n# Setting the active space to HOMO-1 to LUMO+1.\nfrozen_orbitals_gly = get_orbitals_excluding_homo_lumo(glycine, homo_minus_n=1, lumo_plus_n=1)\nglycine.freeze_mos(frozen_orbitals_gly, inplace=True)\nprint(f\"The neutral form of GLY will be described by an active space of {glycine.n_active_mos} molecular orbitals and {glycine.n_active_electrons} electrons.\")\n\nThe neutral form of GLY will be described by an active space of 4 molecular orbitals and 4 electrons.\n\n\nOne might wonder why this amino acid dissolves in water despite being a neutral organic compound. The reason lies in its behavior when in water; evidences show that amino acids adopt a zwitterionic form [3-6]. Although the entire molecule remains electrically neutral, a hydrogen atom shifts from the carboxylic acid group to the amine group, showcasing a form of tautomerism. Thus, to precisely model the interaction of water with glycine, it is crucial to include the equivalent tautomer in the calculations of solvation properties.\nIn the next cell, we construct this chemical structure while using the same approach of freezing certain molecular orbitals.\n\nxyz_zwitterion = \"\"\"\n C -0.72588 -0.48930 -0.87995\n O -0.40429 -0.99901 0.24400\n O -1.71249 -0.74617 -1.57606\n C 0.24065 0.58647 -1.40746\n H 0.94067 0.15610 -2.10976\n H -0.32329 1.37177 -1.87959\n N 0.99940 1.14332 -0.24215\n H 1.19967 0.36262 0.37817\n H 1.91733 1.52621 -0.51811\n H 0.35328 1.80600 0.26884\n\"\"\"\n\n# Creating a molecule object from the coordinates.\nzwitterion = SecondQuantizedMolecule(xyz_zwitterion, basis=basis)\n\n# Setting the active space to HOMO-1 to LUMO+1.\nfrozen_orbitals_zwit = get_orbitals_excluding_homo_lumo(zwitterion, homo_minus_n=1, lumo_plus_n=1)\nzwitterion.freeze_mos(frozen_orbitals_zwit)\nprint(f\"The zwitterion form of GLY will be described by an active space of {zwitterion.n_active_mos} molecular orbitals and {zwitterion.n_active_electrons} electrons.\")\n\nThe zwitterion form of GLY will be described by an active space of 4 molecular orbitals and 4 electrons.\n\n\nWith the molecules now encoded as Tangelo objects, we’re ready to perform quantum chemistry calculations. Below is a visual representation illustrating the two distinct tautomers of the glycine amino acid that we previously constructed.\n\n\n\nGlycine forms\n\n\n\n\nUsing quantum algorithms on the glycine molecule\nThe following code cell defines the options passed to our quantum solver (for simplicity, the well-known Variational Quantum Eigensolver (VQE) with a UCCSD ansatz). These settings are applied in subsequent energy computations.\n\nvqe_options= {\n \"ansatz\": BuiltInAnsatze.UCCSD,\n \"qubit_mapping\": \"scBK\",\n \"up_then_down\": True\n }\n\nWe then run the quantum solver for both forms of glycine. We are particularly interested in the total molecular energies obtained, as they are necessary to calculate the hydration energy later on (see step 1 outlined in the “Computing solvation energies” section above).\n\nquantum_solver_gly = VQESolver({\"molecule\": glycine, **vqe_options})\nquantum_solver_gly.build()\ne_quantum_gly = quantum_solver_gly.simulate()\nprint(f\"The gas phase molecular energy of glycine (neutral) is {e_quantum_gly:.5f} Ha.\")\n\nThe gas phase molecular energy of glycine (neutral) is -282.85661 Ha.\n\n\n\nquantum_solver_zwit = VQESolver({\"molecule\": zwitterion, **vqe_options})\nquantum_solver_zwit.build()\ne_quantum_zwit = quantum_solver_zwit.simulate()\nprint(f\"The gas phase molecular energy of glycine (zwitterion) is {e_quantum_zwit:.5f} Ha.\")\n\nThe gas phase molecular energy of glycine (zwitterion) is -282.79736 Ha.\n\n\nSince tautomers have the same set of atoms, comparing the two molecular energies indicates that the neutral form of the glycine amino acid is more stable than the zwitterion. This outcome aligns with the fact that formal charges on atoms in the gas phase are difficult to generate due to the lack of an environment for stabilization.\nWe now have access to the molecular energies of each tautomer. We now sample the energy of the molecular system consisting of a cluster of water around the molecules (see step 2 outlined in the “Computing solvation energies” section above). The energy differences \\(\\Delta E_{\\text{solv}}\\) (after removing the water molecule potential energy contributions) should be proportional to the free energies of solvation \\(\\Delta H_{\\text{solv}}\\) or \\(\\Delta G_{\\text{solv}}\\) measured in laboratories.\nThe remaining steps taken in this notebook are revolving around computing the molecular energies of those clusters using the QM/MM method, which is a simplified version of a more complete study as reported in [7].\n\n\nPreparing the QM/MM calculation: get the partial charges for \\(H_2O\\)\nThe supported QM/MM framework in Tangelo needs the partial charges for the part of the system described via molecular mechanics. This is what we do in the next code cell. Here, in summary: - A mean-field calculation is performed for a single water molecule; - The Mulliken atomic charges are retrived from the analyze method; - A function is defined to construct an array in the [(partial_charge, (x, y, z)), ...] format.\n\nxyz_h2o = \"\"\"\n O -2.08448 -2.25652 -0.22848\n H -2.35312 -3.17615 -0.12238\n H -1.83562 -1.85666 0.64078\n\"\"\"\n\nh2o = SecondQuantizedMolecule(xyz_h2o, basis=basis)\n(_, mulliken_atomic_charges), _ = h2o.mean_field.analyze()\n\ndef get_charges(water_molecule_coords):\n xyz_h2os = atom_string_to_list(water_molecule_coords)\n mulliken_charges_waters = [*mulliken_atomic_charges] * (len(xyz_h2os) // len(mulliken_atomic_charges))\n\n return [(q, xyz_h2os[i][1]) for i, q in enumerate(mulliken_charges_waters)]\n\nprint(f\"The Mulliken partial charges computed from an Hartree-Fock calculation in {basis} are\\nO = {mulliken_atomic_charges[0]}\\nH1 = {mulliken_atomic_charges[1]}\\nH2 = {mulliken_atomic_charges[2]}.\")\n\nThe Mulliken partial charges computed from an Hartree-Fock calculation in cc-pvdz are\nO = -0.6346652155730794\nH1 = 0.3194372332962432\nH2 = 0.31522798227682913.\n\n\n\n\nComputing the solvation energies using QM/MM with charge embedding\nThe next task involves computing solvated molecule energies using the QM/MM electrostatic embedding method. Using the previously calculated water atomic charges, the QMMMProblemDecomposition class consolidates necessary information for this calculation. This includes: - “geometry”: Coordinates of the molecule in a list format. - “mmpackage”: Molecular mechanics package utilized. - “charges”: Electrostatic charges and their coordinates. - “qmfragment”: A Fragment object defining the solver and related options for computing the molecular energy in quantum mechanics.\nIt’s worth noting the various methods available for generating water cluster geometries. The following geometries were created by randomly positioning three water molecules around each terminal and subsequently optimized using the AMBER94 force field. This optimization step can be done with any molecular mechanics package, like OpenMM or RDKit. An illustration showcasing one of the generated conformations is presented in the figure below.\n\n\n\nCluster of water molecules and glycine\n\n\n\nxyz_waters_gly = \"\"\"\n O -2.08448 -2.25652 -0.22848\n H -2.35312 -3.17615 -0.12238\n H -1.83562 -1.85666 0.64078\n O -0.29165 -1.17766 -1.97014\n H 0.55770 -1.31516 -1.52416\n H -0.98020 -1.66830 -1.47470\n O 4.62948 -0.92998 0.20740\n H 5.09272 -1.49221 0.83838\n H 3.79167 -1.33448 -0.07876\n O -2.80676 2.14474 -0.62525\n H -1.85118 1.90309 -0.45829\n H -2.93359 2.38421 -1.55080\n O -1.81568 -0.72927 1.87434\n H -1.84048 -0.80009 2.83473\n H -2.66617 -0.33065 1.49202\n O -3.76770 0.00135 0.46835\n H -3.57200 0.87852 0.03795\n H -3.59648 -0.71670 -0.16049\n\"\"\"\n\nqmmm_model_gly = QMMMProblemDecomposition({\n \"geometry\": atom_string_to_list(xyz_glycine),\n \"mmpackage\": \"rdkit\",\n \"charges\": get_charges(xyz_waters_gly),\n \"qmfragment\": Fragment(solver_high=\"vqe\",\n options_high={\"basis\": basis, \"frozen_orbitals\": frozen_orbitals_gly, **vqe_options})\n})\n\ne_qmmm_gly = qmmm_model_gly.simulate()\nprint(f\"The hydration energy for glycine (neutral) is {(e_qmmm_gly-e_quantum_gly) * ha_to_kcalmol * cal_to_j:5.0f} kJ/mol.\")\n\nThe hydration energy for glycine (neutral) is -136 kJ/mol.\n\n\n\nxyz_waters_zwit = \"\"\"\n O -2.33478 0.43459 1.56814\n H -1.65671 -0.25663 1.45580\n H -3.11977 0.14754 1.04111\n O 3.57502 1.26874 -0.76381\n H 3.59649 0.47309 -0.17203\n H 4.40577 1.75433 -0.74479\n O -0.93902 2.44112 0.89259\n H -1.06155 3.25709 1.38776\n H -1.58516 1.71621 1.19305\n O -3.99606 -0.58515 -0.21107\n H -4.64697 -0.10084 -0.73262\n H -3.23854 -0.83634 -0.78921\n O 3.12434 -0.68537 0.90701\n H 3.33270 -0.62390 1.84641\n H 2.63054 -1.54344 0.73112\n O 1.55389 -2.64818 0.61476\n H 0.69747 -2.15400 0.51558\n H 1.54074 -3.48659 0.14319\n\"\"\"\n\nqmmm_model_zwit = QMMMProblemDecomposition({\n \"geometry\": atom_string_to_list(xyz_zwitterion),\n \"mmpackage\": \"rdkit\",\n \"charges\": get_charges(xyz_waters_zwit),\n \"qmfragment\": Fragment(solver_high=\"vqe\",\n options_high={\"basis\": basis, \"frozen_orbitals\": frozen_orbitals_zwit, **vqe_options})\n})\n\ne_qmmm_zwit = qmmm_model_zwit.simulate()\nprint(f\"The hydration energy for glycine (zwitterion) is {(e_qmmm_gly-e_quantum_zwit) * ha_to_kcalmol * cal_to_j:5.0f} kJ/mol.\")\n\nThe hydration energy for glycine (zwitterion) is -292 kJ/mol.\n\n\nIt’s important to note that we haven’t deducted the potential energy contribution of water molecules. This omission is intentional based on the PySCF backend used in this study, as outlined in its QM/MM documentation. In PySCF’s implementation, the calculated total energy doesn’t include the static Coulomb interactions of MM point charges, MM energy, vdw interaction, or other bonding/non-bonding effects between QM and MM particles. Tangelo supports other chemistry backends, including Psi4, and users should refer to the relevant backend documentation to confirm energy contributions and understand the output.\nThe results indicate negative energy differences, suggesting stabilization for both forms of the glycine amino acid in aqueous solutions. Experimental \\(\\Delta H_{\\text{solv}}\\) is approximately 122 kJ/mol (Russian Journal of General Chemistry, 2008, 78, 6, 1155 - 1160). While we’re not directly computing free energy differences (for example, we didn’t include entropic effects), our results fall within a similar order of magnitude. Notably, the zwitterion form exhibits enhanced stabilization by the water shell, attributed to water’s polar nature, which enhances its ability to solvate polar molecules." + }, + { + "objectID": "examples/problem_decomposition/qmmm.html#closing-words", + "href": "examples/problem_decomposition/qmmm.html#closing-words", + "title": "The QM/MM method: Solvation of the Glycine Amino Acid", + "section": "Closing words", + "text": "Closing words\nThis notebook serves as an introductory exploration of the QM/MM method applied to biochemical systems within aqueous environments, demonstrating how quantum algorithms in Tangelo can be applied to such applications.\nBy examining glycine tautomers and stability differences, it showcases the potential of QM/MM for studying solvated systems. We demonstrated that QM/MM + VQE calculations are able to show both forms of the glycine amino acid are stabilized in aqueous solutions. Although we didn’t directly compute free energy differences, our results roughly align with experimental data, notably indicating the zwitterion’s enhanced stabilization by the water shell due to water’s inherent polarity.\nLike other problem decomposition techniques available in Tangelo (ONIOM, DMET, etc), the QM/MM implementation gives users the freedom to select and integrate quantum algorithms tailored to their research needs. In this tutorial, we simply used VQE as the fragment solver, but the QM/MM method can be paired with other quantum or classical solvers in Tangelo. Users can tailor quantum algorithms to their biochemical systems, optimizing their computational approach based on the nature and complexity of the problem at hand.\nWhat will you do with QM/MM and Tangelo ?" + }, + { + "objectID": "examples/problem_decomposition/qmmm.html#references", + "href": "examples/problem_decomposition/qmmm.html#references", + "title": "The QM/MM method: Solvation of the Glycine Amino Acid", + "section": "References", + "text": "References\n\nLiu, H.; Low, G.H.; Steiger, D.S.; Häner, T.; Reiher, M.; Troyer, M. Prospects of quantum computing for molecular sciences. Materials Theory. 2022, 6, 11.\nIzsák, R.; Riplinger, C.; Blunt, N.S.; de Souza, D.; Holzmann, N.; Crawford, O.; Camps, J.; Neese, F.; Schopf, P. Quantum computing in pharma: A multilayer embedding approach for near future applications. J. Comput. Chem. 2023, 44(3), 406.\nJensen, J.H.; Gordon, M.S. On the Number of Water Molecules Necessary To Stabilize the Glycine Zwitterion. J. Am. Chem. Soc. 1995, 117, 8159-8170.\nFernandez-Ramos, A.; Smedarchina, Z.; Siebrand, W.; Zgierski, M.Z. A direct-dynamics study of the zwitterion-to-neutral interconversion of glycine in aqueous solution. J. Chem. Phys. 2000, 113, 9714-9721.\nValverde, D.; da Costa Ludwig, Z.M.; da Costa, C.R.; Ludwig, V.; Georg, H. C. Zwitterionization of glycine in water environment: Stabilization mechanism and NMR spectral signatures. J. Chem. Phys. 2018, 148, 024305.\nBhate, M.P.; Woodard, J.C.; Mehta M.A. Solvation and Hydrogen Bonding in Alanine- and Glycine-Containing Dipeptides Probed Using Solution- and Solid-State NMR Spectroscopy. J. Am. Chem. Soc. 2009, 131, 27, 9579-9589.\nTakenaka, N.; Kitamura, Y.; Koyano, Y.; Asada, T.; Nagaoka, M. Reaction path optimization and vibrational frequency analysis via ab initio QM/MM free energy gradient (FEG) method: Application to isomerization process of glycine in aqueous solution. Theor. Chem. Acc. 2011, 130, 215-226." + }, { "objectID": "examples/problem_decomposition/oniom.html", "href": "examples/problem_decomposition/oniom.html", diff --git a/sitemap.xml b/sitemap.xml index 1aa53b3..bf437f3 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,126 +2,130 @@ https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T2_simulators_solved.html - 2023-12-08T22:02:08.422Z + 2023-12-13T19:15:04.496Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T1_circuits_solved.html - 2023-12-08T22:02:07.550Z + 2023-12-13T19:15:03.608Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T5_fault_tolerant_build_blocks.html - 2023-12-08T22:02:06.562Z + 2023-12-13T19:15:02.564Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T5_fault_tolerant_build_blocks_solved.html - 2023-12-08T22:02:05.374Z + 2023-12-13T19:15:01.348Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T4_hardware_experiments.html - 2023-12-08T22:02:04.182Z + 2023-12-13T19:15:00.112Z https://github.com/goodchemistryco/Tangelo-Examples/index.html - 2023-12-08T22:02:03.210Z + 2023-12-13T19:14:59.124Z https://github.com/goodchemistryco/Tangelo-Examples/examples/chemistry/qchem_modelling_basics.html - 2023-12-08T22:02:01.890Z + 2023-12-13T19:14:57.800Z https://github.com/goodchemistryco/Tangelo-Examples/examples/hardware_experiments/qemist_cloud_hardware_experiments_braket.html - 2023-12-08T22:01:59.942Z + 2023-12-13T19:14:55.816Z https://github.com/goodchemistryco/Tangelo-Examples/examples/hardware_experiments/berylium_ibm_quantum.html - 2023-12-08T22:01:58.030Z + 2023-12-13T19:14:53.828Z https://github.com/goodchemistryco/Tangelo-Examples/examples/variational_methods/vqe.html - 2023-12-08T22:01:56.862Z + 2023-12-13T19:14:52.632Z https://github.com/goodchemistryco/Tangelo-Examples/examples/variational_methods/iqcc_using_clifford.html - 2023-12-08T22:01:55.462Z + 2023-12-13T19:14:51.208Z https://github.com/goodchemistryco/Tangelo-Examples/examples/measurement_reduction/classical_shadows.html - 2023-12-08T22:01:54.570Z + 2023-12-13T19:14:50.308Z https://github.com/goodchemistryco/Tangelo-Examples/examples/workflow_basics/3.noisy_simulation.html - 2023-12-08T22:01:53.166Z + 2023-12-13T19:14:48.980Z https://github.com/goodchemistryco/Tangelo-Examples/examples/workflow_basics/symbolic_simulator.html - 2023-12-08T22:01:51.630Z + 2023-12-13T19:14:47.472Z https://github.com/goodchemistryco/Tangelo-Examples/examples/problem_decomposition/ifci_mifno.html - 2023-12-08T22:01:50.418Z + 2023-12-13T19:14:46.264Z + + + https://github.com/goodchemistryco/Tangelo-Examples/examples/problem_decomposition/qmmm.html + 2023-12-13T19:14:44.960Z https://github.com/goodchemistryco/Tangelo-Examples/examples/problem_decomposition/oniom.html - 2023-12-08T22:01:48.862Z + 2023-12-13T19:14:43.988Z https://github.com/goodchemistryco/Tangelo-Examples/examples/problem_decomposition/dmet.html - 2023-12-08T22:01:49.818Z + 2023-12-13T19:14:45.636Z https://github.com/goodchemistryco/Tangelo-Examples/examples/problem_decomposition/dmet_uhf.html - 2023-12-08T22:01:51.022Z + 2023-12-13T19:14:46.856Z https://github.com/goodchemistryco/Tangelo-Examples/examples/workflow_basics/2.qpu_connection.html - 2023-12-08T22:01:52.510Z + 2023-12-13T19:14:48.340Z https://github.com/goodchemistryco/Tangelo-Examples/examples/workflow_basics/1.the_basics.html - 2023-12-08T22:01:53.974Z + 2023-12-13T19:14:49.752Z https://github.com/goodchemistryco/Tangelo-Examples/examples/fault_tolerant/qsp_state_prep.html - 2023-12-08T22:01:54.994Z + 2023-12-13T19:14:50.748Z https://github.com/goodchemistryco/Tangelo-Examples/examples/variational_methods/adapt.html - 2023-12-08T22:01:56.054Z + 2023-12-13T19:14:51.820Z https://github.com/goodchemistryco/Tangelo-Examples/examples/variational_methods/vqe_custom_ansatz_hamiltonian.html - 2023-12-08T22:01:57.382Z + 2023-12-13T19:14:53.172Z https://github.com/goodchemistryco/Tangelo-Examples/examples/hardware_experiments/overview_endtoend.html - 2023-12-08T22:01:59.530Z + 2023-12-13T19:14:55.368Z https://github.com/goodchemistryco/Tangelo-Examples/examples/hardware_experiments/umbrella_inversion.html - 2023-12-08T22:02:00.994Z + 2023-12-13T19:14:56.900Z https://github.com/goodchemistryco/Tangelo-Examples/examples/chemistry/excited_states.html - 2023-12-08T22:02:02.882Z + 2023-12-13T19:14:58.796Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T2_simulators.html - 2023-12-08T22:02:03.666Z + 2023-12-13T19:14:59.588Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T3_VQE.html - 2023-12-08T22:02:04.702Z + 2023-12-13T19:15:00.652Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T4_hardware_experiments_solved.html - 2023-12-08T22:02:05.902Z + 2023-12-13T19:15:01.888Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T3_VQE_solved.html - 2023-12-08T22:02:07.098Z + 2023-12-13T19:15:03.164Z https://github.com/goodchemistryco/Tangelo-Examples/hands_on/T1_circuits.html - 2023-12-08T22:02:07.974Z + 2023-12-13T19:15:04.036Z