grimme-lab / CENSO

CENSO - Commandline ENergetic SOrting of Conformer Rotamer Ensembles
https://xtb-docs.readthedocs.io/en/latest/CENSO_docs/censo.html
GNU General Public License v3.0
26 stars 10 forks source link

Isotopic Abundance in anmr #65

Open ph283804 opened 2 weeks ago

ph283804 commented 2 weeks ago

Is it possible in the current implementation of anmr/enso to introduce a way to simulate spectra with arbitrary natural abundances?

As an example, let me elaborate on the formic acid molecule, which should have two signals in 1H NMR, and 12C/13C isotopes.

One signal would be adjacent to a C atom (which I will name the HC- hydrogen), another would be the -OOH hydrogen. In current anmr settings, -OOH would be excluded from the NMR simulation and my spectrum would only include the HC- hydrogen.

In a "real" spectrum, since there is 1.1% of 13C at natural abundance, I would observe 98.9% of my signal being what you would expect when HC- is in a molecule with 12C, and 1.1% of my signal would be a doublet with the respective 13C coupling, the "satellites" which we observe during routine 1H NMR measurement. The same would be true in 19F spectra (13C satellites). However, as far as I am aware, it is currently only possible to obtain from enso a fully 12C or a fully 13C spectrum (although there is a known issue with this, see https://github.com/grimme-lab/CENSO/issues/53).

While I would like to see this feature added and would certainly make heavy use of it, I am unsure whether an implementation with arbitrary changes in isotope enrichment for specific atoms in a molecule is feasible in the current version of anmr, but it would certainly be useful. If it is not possible to do so in the program itself, is it a possibility to generate an "indirect" workflow? For example:

1: Simulate Spectrum at 100% 12C for all atoms, named spectrum A (Which would be the same as simulate a C-decoupled 1H NMR spectrum in the current implementation of anmr)

2: Simulate Spectrum at 100% 13C for specific atoms N1, N2, N3, etc., for example, named spectrum B, and if feasible, exclude other resonances (such as any hydrogens which are not directly bonded to N1, N2,N3). I am unsure if this is currently possible in anmr, as I think it is only possible to either make ALL atoms 13C or none.

3: Simulate a linear combination of spectrum A and spectrum B (for example, 0.989 A and 0.011 B). This should be easy but please correct me if I am wrong.

Is it at all feasible or possible to introduce such a feature and if yes, would you consider it?

lmseidler commented 2 weeks ago

Currently, this is not possible directly as you already mentioned. Implementing a version with arbitrary isotope concentrations would significantly impact performance since this would increase the size of the spin system significantly. Therefore your indirect solution would be the way to go.

Could you however elaborate more on your second step? Because I'm not sure what would need to be implemented additionally to what is already possible in anmr.

ph283804 commented 2 weeks ago

On the second step I am not sure if it is possible to make "single atoms" be computed, only elements in general.

in .anmrrc we have, for example:

7 8 XH acid atoms ENSO qm= ORCA mf= 400.0 lw= 1.0 J= on S= on T= 298 TMS[chcl3] pbe0-d4[SMD]/def2-TZVP//r2scan-3c[CPCM]/def2-mTZVPP 1 31.791 0.0 1 6 186.844 0.0 0 9 153.141 0.0 1 14 344.381 0.0 0 15 295.464 0.0 0

The first line excludes any hydrogen adjacent to nitrogen and oxygen from the computation. the lines containing 1, 6, 9, etc as the first input only allows you to enable or disable including that element in the NMR calculation, but it does not allow any specification of individual atoms.

For example, in a more complex substrate (acetic acid), where we would have H3C-C(=O)(-OH), we could have a situation where I am interested in an isotopologue of this molecule where H3C-C(=O)(-OH) is labelled with 13C, whereas H3C-C(=O)(-OH) is at natural abundance. Currently it is, as far as I know (or as far as I can find information on the xtb documentation page and on the anmr --help command), only possible to compute 100% 13C abundance for both H3C-C(=O)(-OH), but not for either carbon individually.

lmseidler commented 2 weeks ago

So would it already be enough for your purposes to have the ability to define specific atoms to be excluded from the calculation? That would probably be straightforward to implement.

ph283804 commented 2 weeks ago

If it's possible to do on the ANMR side of the calculation (as in, "post-processing" of a censo job), it would most certainly be very useful. If this is the case, a "routine" where this is possible would look like this:

An example to achieve a natural abundance 1H spectrum of acetic acid

-Run CENSO job for acetic acid with all nuclei, shieldings and couplings implemented

-run anmr on H3C-C(=O)(-OH) with all H atoms enabled except for H3C-C(=O)(-OH), no C atoms enabled (default anmr routine)

-run anmr on H3C-C(=O)(-OH) with all H atoms enabled and all C atoms enabled

-Weight average resulting 1H spectrum (I am assuming that to do this, the number of discrete x/y pairs is identical across both anmr.dat files, in other words, there is an identical number of identical x values across both anmr.dat files. Could you please confirm if this is true when "boundaries" specified by the -r [min] [max] command are identical? If not, I am not sure how to properly weight average the anmr.dat files)

An example to simulate a spectrum of acetic acid 13C enriched in the methyl position

-Run CENSO job for acetic acid with all nuclei, shieldings and couplings implemented

-run anmr on H3C-C(=O)(-OH) with all H atoms enabled except for H3C-C(=O)(-OH), no C atoms enabled (default anmr routine)

-run anmr on H3C-C(=O)(-OH) with all H atoms enabled and only H3C-C(=O)(-OH) enabled for the C part

-run anmr on H3C-C(=O)(-OH) with all H atoms enabled and only H3C-C(=O)(-OH)) enabled for the C part (in a case where there are more C atoms, such as propionic acid H3C-H2C-C(=O)(-OH), this would have all C atoms enabled except for H3C-H2C-C(=O)(-OH))

-Weight average resulting 1H spectrum

This is what I would roughly envision by "disabling certain atoms", is that what you have in mind as a feature to " the ability to define specific atoms to be excluded from the calculation" as well?

lmseidler commented 1 week ago

Yes, exactly. This should be fairly straightforward to implement and I can take a look at that. Concerning your question w.r.t. the number of x values: afaik these should be the same if xmax and xmin are the same.

I will let you know when I have this prepared for you.