-
Notifications
You must be signed in to change notification settings - Fork 0
improve NXelectron_level #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
For reference a script that generates the table from fractions import Fraction
def shell_name(n):
# K, L, M, ...
return chr(ord("K") - 1 + n)
def subshell_name(l):
# s, p, d, ...
if l == 0:
return "s"
if l == 1:
return "p"
if l == 2:
return "d"
if l == 3:
return "f"
l -= 4
name = ord("g")
skip = ("s", "p", "d", "f", "j")
for _ in range(l):
name += 1
while chr(name) in skip:
name += 1
return chr(name)
for n in range(1, 7): # principal quantum number (shell)
shell = shell_name(n)
i = 1
for l in range(n): # azimuthal quantum number (subshell)
subshell = subshell_name(l)
# for m in range(-l, l+1) # magnetic quantum number
for s in [Fraction(-1, 2), Fraction(1, 2)]: # spin quantum number
j = l + s # total angular momentum (spin-orbit splitting)
if j < 0:
continue
if shell == "K":
xname = shell
else:
xname = f"{shell}{i}"
if subshell == "s":
aname = f"{n}{subshell}^{{-1}}"
else:
aname = f"{n}{subshell}_{{{j}}}^{{-1}}"
# 2*j+1 possible energetically equivalent states?
print(f'<item value="{xname}"> <doc>:math:`{aname}`</doc> </item>')
i += 1 |
|
First, the easy part regarding how long you should make that list, I would complete the entire P group to include P7. Regarding the labeling, the name "electron level" is not meaningful. A better labeling would be "electron energy level," but this is too general for what K, L1, L2, etc. represent. They are multielectronic states with one missing electron in a given orbital. In fact, on Wikipedia, they are designed as the "X-ray notation" for atomic orbitals: https://en.wikipedia.org/wiki/X-ray_notation. What we are labeling here is defined only in the context of X-ray sciences. Therefore, we should only try to make this as general as it should be. Now that the name of the attribute in the NXxas class is "absorption_edge," and thus the possibility of confusing the user is minimal, we should use the IUPAC definition for the base class, which clearly defines K, L1, L2, etc as "x-ray levels": "The electronic states occurring as initial and final states of a process involving the absorption or emission of x-ray radiation are called x-ray levels." (see sections 2 and 3 of the IUPAC document https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/abs/10.1002/xrs.1300200308). So, my vote is for having this NXxray_level. |
|
I prefer "electron level". X-rays do not have levels. We called them "electron level" is not confusing and it is certainly meaningful. @mretegan are you honestly confused by this or is something else going on? I find this concerning. This is just not that complicated. K = 1s, L1 = 2s, L2 = 2p1/2, L3 = 2p3/2. As the Wikipedia page says, these are equivalent ways of "labeling atomic orbitals", which is to say, the electron orbitals of the atoms. They are the labels for the levels. |
Yes and I think I finally understand why. Thanks for being persistent @mretegan ! Please keep doing so. I lack theoretical knowledge so bare with me and tell me where I'm wrong. To me there seem to be two points of view here: we either describe an electron energy level in an atom or an electronic state of the atom with one hole. The latter is also as an energy level, but then an atom energy level as opposed to an electron energy level. Is it correct to say that talking about electron energy levels in general is not useful because the energy level splitting we are talking about happens specifically for atoms with one missing electron? It is not like we are labeling electron energy levels in general, because there are different types of splitting (e.g. crystal field, spin-orbit). That's why we should be strict and say that The IUPAC recommendation for spectroscopy says: "The electronic states occurring as initial and final states of a process involving the absorption or emission of x-ray radiation are called x-ray levels." So they define an electronic state as a level, presumably meaning the energy level of an atom. And the word x-ray refers to the fact that we consider atoms with one missing electron. I.e. consider spin-orbit splitting right? Can someone knowledgeable describe this is the shortest possible way? It took me long enough to understand (provided I got it right this time). Thanks again @mretegan ! |
I added more explanations to the best of my ability. Someone else can probably improve in another PR. |
d56d0cf to
02e43f7
Compare
|
I would say that these levels are not really related to whether an electron has been removed from an atom by an X-ray or electron or any other particle. "K" is identical to "1s", which is the most tightly bound electron level of an atom. "M4" is identical to "3d3/2" That is all it is. As the Wikipedia page https://en.wikipedia.org/wiki/X-ray_notation says The link to atomic orbitals clarifies that these are electronic orbital levels (ie, nothing to do with the nucleus of the atom). |
|
Hi everybody, @woutdenolf pointed me to this PR through the main NIAC repo. In the context of photoemission spectroscopy, we in FAIRmat have also been working on something very similar: https://github.com/FAIRmat-NFDI/nexus_definitions/blob/fairmat/contributed_definitions/NXelectron_level.nxdl.xml. In fact, some of the I am happy to see that you have also been thinking in a similar direction wrt naming what we often call I agree with your discussion above that "M4" is identical to "3d3/2". However, for the notation in a field like XPS, it would still be nice if I could actually write "3d3/2" because the different level are usually labeled with their electron configuration. For this reason, we had made a distinction for I am curious what you think about our approach and how we can harmonize. Also tagging @domna from our team here. We are not using our |
|
Can anyone reference a publication, book or organization that uses and defines the term "electron level"? We have one for "x-ray level": https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/abs/10.1002/xrs.1300200308. They define "x-ray level", "diagram level" and "x-ray diagram level". We should be using the later I think but it is too long. And if not, could someone please write down the definition of "electron level" as you understand it? I do not manage to do this, regardless of what we call it. When I say for example it is "a multi-electron configuration with a missing core-level electron" it must be wrong. For example L2 and L3 have the same electron configuration but they are obviously different in our context. The electron configuration of In the docs I'm talking about the unpaired electron left behind having a spin parallel or antiparallel alignment to the orbital momentum so the same electron configuration with one core hole is split in two degenerate groups of states like L2 and L3. But all this goes above my level of expertise. I'm doing this to get a real spectroscopist to provide a proper definition or a reference to one. In conclusion, whatever name we choose we need to either refer to something that defines it or define the name ourselves. |
|
For the immediate application of XAS here, I think it is OK to just list the electronic level that is expected to be empty in the X-ray excitation. But, I can see that some measurements like RIXS (and even XRF) needs to detail multiple levels. For notations to use (or perhaps "allow") to identify a level, "M4" and "3d3/2" are equivalent. But there might be a few variations on how to spell or render "3d3/2", leading to questions of whether"$3d_{3/2}$" is allowed. I believe UTF-8 "U+00BD" would give "1/2", but I don't know if there is a "3/2", which might complicate what is permitted. I wonder if the NIAC has faced similar questions before for specifying which bytes are allowed for an enum string (perhaps with Angstrom symbol?). Anyway, I would not be opposed "3d3/2". |
|
Sorry for my late reply, but I was fully busy on the beamline. I agree with @newville and @lukaspie for keeping |
|
As @woutdenolf said above, there is the IUPAC definition for precisely what we want to label. Here it is again, just in case you missed it: "The electronic states occurring as initial and final states of a process involving the absorption or emission of x-ray radiation are called x-ray levels." They use it to label specific multielectronic states that appear in X-ray spectroscopy. You can read more on this here: https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.31.616. I don't understand why we must dismiss all this using the argument, "X-rays don't have levels." I propose two solutions:
|
|
What do you think about having the An advantage of doing it this way is that it can be validated if needed. If we do the same for the emission lines, both |
I agree with the enumeration proposal. It is the same approach in xraylib (X-ray fluorescence lines macros). |
or even https://xraypy.github.io/XrayDB/overview.html#x-ray-edges ;) I thought the idea was for "edge" to be an enumeration of electron levels. Sorry, what was the other alternative? |
|
If it is an enumeration, we don't need a specific class, |
|
@mretegan A simple enumeration of values "K", "L1", "L2", ... would be fine with me. I think the idea for a class is that you could give more information so that "K" and "1s" would be tied together. But that could also just be in the documentation or referenced away. |
|
From a reusability perspective in NeXus I would prefer that this concept actually does become its own base class. Otherwise, for any technique that wants to use the same concept one would also have to write the long enumeration of "K", "L1", "L2", etc. into the application definition, which makes it hard to read and there would be many repititions in NeXus. I also would like to keep the information that "K" and "1s" are linked and would even advocate for a solution where writing any of the two would be possible (i.e., by extending the enumeration to include "1s", "2s", "2p", and so on) since other techniques traditionally use that notation. Thus my vote would be to keep it as a base class. Regarding the naming, I think what we actually want to describe is an energy level. In order to make it clear that this class describe electronic levels (rather than energy levels of nuclei or vibrational/rotational energy levels in molecules), I would suggest to call the class |
|
@lukaspie I would not be opposed to having a base class, but there seem to be at least 3 opinions on naming things and little agreement. I think adding yet another suggestion the name of such a base class is probably the final nail in the coffin. Progress on NXxas has pretty much stalled by this discussion. That is unfortunate because the existing NXxas definition is utter junk, written by people who have never done XAS and were too ignorant to ask anyone who did. Unfortunately, the NIAC failed to do its job in vetting that. I think we should just use a field "edge" in the NXxas definition that is an enumeration of strings "K", L1", "L2", ... "P7". I also think We should use a similar enumeration for "element" (the atomic symbol, "H" through "Og"). I propose we close and move on. |
That was our first thought as well. But then think about how we would represent the K emission lines: K-L1, K-L2, K-L3, K-M2, K-M3, K-M4, K-M5, K-M2, K-M3, K-N2, K-N3. If you would use a class for the level we would need to create 22 HDF5 groups with one string dataset each. Or if we create a class for each emission line as well: 11 HDF5 groups with 2 subgroups each. So I thought we need a re-usable enumeration. If NeXus does not have the concept we can ask the NIAC if this can be created. |
|
If it could help, for my own work, I use simple Python tuples and dictionaries to achieve what we are discussing. Please, have a look to lines 81-348 here: https://github.com/maurov/xraysloth/blob/master/sloth/utils/xdata.py I agree with @lukaspie that we should avoid re-inventing the wheel for each NeXus application definition that requires elements, edges, lines and transitions, thus I would go for the solution of a re-usable enumeration, as proposed by @woutdenolf. Please, let's move on on this! |
Still not really sure what to call these levels. Perhaps "electroionization subshell"? But it is used in denoting transitions as well so probably not. Also I'm not sure how far I need to go in the list.