IsotopeData is very useful for building a table of nuclides.
However, it is very inconvenient for including the neutron.
For example, IsotopeData[1]
gives a list of 7 entities including the proton, deuterium, tritium, etc. to 7H. IsotopeData[2]
gives a list of 2He to 10He, and so on for similar isotopes. However, IsotopeData[0]
does not give a list of entities (that is 1 member long): { neutron }
.
This is not because IsotopeData doesn't know about the neutron. Observe that IsotopeData[{0,1}]
evaluates to Entity["Isotope", "Neutron"]
, which can be probed in all of the usual ways.
The only way I have been able to get around this is by coding a lot of special-case handling for the neutron. For example:
IsotopeData[0]
During evaluation of In[123]:= IsotopeData::notent: 0 is not a known entity, class, or tag for IsotopeData. Use IsotopeData[] for a list of entities.
(* Evaluates to IsotopeData[0], compare with *)
IsotopeData[1]
(* which gives a nice list of hydrogen isotopes. *)
IsotopeData[{0,1}] (* gives the desired entity. *)
(* No neutron: *)
nuclides = Flatten[Table[{z, a}, {z, 1, maxZ}, {a, IsotopeData[#, "MassNumber"] & /@ IsotopeData[z]}], 1];
(* With neutron: *)
nuclidesN = Flatten[Table[{z, a}, {z, 0, maxZ}, {a, IsotopeData[#, "MassNumber"] & /@ If[z == 0, {IsotopeData[{0, 1}]}, IsotopeData[z]]}], 1];
My question is: is this an oversight, or intentional? It seems that if Mma knows that 0! = 1
, it should also know that IsotopeData[0] = { neutron }
: ). [Also, there's a chance that the tetraneutron is bound (though the evidence hasn't been independently reproduced).]
Otherwise: is there a more elegant way to go about including the neutron?