Consider the following:

cacl = Molecule[{Atom["Ca"], Atom["Cl"]}, {Bond[{1, 2}, "Single"]}];
MoleculeValue[cacl, "CanonicalSMILES"]
(* Cl[CaH] *)

Notice the artificial insertion of the hydrogen atom to fill the valency of the calcium atom. I understand that this behaviour is mentioned in the official documentation:

"Hydrogen atoms may be omitted from the atom list if their presence can be inferred from the valence and bonding of the atoms present."

But is there a way to suppress this default behaviour? I want the SMILES representation of the molecule above to be Cl[Ca+], not Cl[CaH].

  • $\begingroup$ Unfortunately, there seems to be no way. I think this choice of default behaviour was a very short-sighted decision on the part of Wolfram Research. $\endgroup$ – Shredderroy Oct 8 at 16:34

I imagine it's because CaCl is not a valid compound. If you want CaCl+, you can do:

cacl = Molecule[{Atom["Ca+"], Atom["Cl"]}, {Bond[{1, 2}, "Single"]}]

enter image description here

MoleculeValue[cacl, "CanonicalSMILES"]


For CaCl2:

cacl2 = Molecule[{Atom["Ca"], Atom["Cl"], Atom["Cl"]}, {Bond[{1, 2}, "Single"], Bond[{1, 3}, "Single"]}];
MoleculeValue[cacl2, "CanonicalSMILES"]



You can use a SMILES string to create the molecule. In a SMILES string, wrapping an atomic symbol with brackets signifies that there should be no implicit hydrogens added.

mol = Molecule["[Ca][Cl]"]

enter image description here

Note that this does leave an unpaired electron on the calcium atom,

In[17]:= AtomList@mol

Out[17]= {Atom["Ca", "UnpairedElectronCount" -> 1], Atom["Cl"]}

which I think is what you are going for.

I think a reasonable way to input atoms like this would be something like

Molecule[{"[Ca]", "Cl"}, {Bond[{1, 2}, "Single"]}]

I can make the above work for 12.1

  • $\begingroup$ Perhaps explicitly indicating the formal charge of a specific atom might be sufficient? $\endgroup$ – J. M. will be back soon 12 hours ago

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.