Skip to content
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

clarify species type extension #264

Open
wants to merge 4 commits into
base: upcoming-2.0.0
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 115 additions & 39 deletions EXT_SpeciesType.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ Convention for Specifying Particle Species

openPMD extension name: `SpeciesType`


Introduction
------------

This convention is for standardizing the names of particle species, e.g. in
particle physics.

This document uses ABNF as specified by [RFC 5234][rfc5234].

[rfc5234]: https://datatracker.ietf.org/doc/html/rfc5234

Additional Record Attribute
---------------------------
Expand All @@ -24,76 +26,150 @@ The following additional attribute for openPMD `mesh records` and
species to be specified, they can be specified using a
semicolon separated list.
- allowed values:
- *see the lists below* and additionally
- `other` if none of the ones below applies, user are free to append a
free text after a colon, e.g. `other:neutralino` or `other:cherry`
- a single *particle species*, which is either:
- one of the list entries below, or
- `other:` followed by any number of spaces (ascii 0x20) or
visible ("printing") ascii characters, i.e. ascii 0x21 to 0x7e
- a *particle species list*, which is multiple entries of the
list below separated by a single semicolon character `;`.
A trailing semicolon `;` is allowed, but not required.
- ABNF:
```
species-type = species-single / species-list / species-other
species-other = "other:" *( VCHAR / SP )
species-list = species-single *( ";" species-single ) [ ";" ]
species-single = elementary / hadron-or-jet / atom
```
- examples:
- `electron` (e.g. on an electron `particle record` or an electron
density `mesh record`)
- `electron;proton;#12C` (e.g. on a `mesh record` for a plasma's
local charge density)
- `other:apple;other:orange` (for a `record` mixing apples & oranges)
- `other:apple` (e.g. for an apple `particle record`)

This attribute can be used with any `record` (including `mesh records`).

A particle species list containing only a single item **must** be
treated as a single species.

> Note that `other:` can *only* be used for single species, it is
> forbidden in lists.
>
> The list separator is a sole `;`. Neither spaces around it nor empty
> list items (two semicolons following each other `;;`) are allowed.
> However, a single trailing semicolon `;` **must** be ignored.

The following values **should not** be used by an implementation, even if
they are allowed above:

- `other:`, as it does not specify any content.
- Trailing spaces, as they can lead to ambiguous display.

### Elementary Particles

Namings for fundamental fermions and their anti-matter particles.

Quarks:
- `up`, `anti-up`
- `down`, `anti-down`
- `charm`, `anti-charm`
- `strange`, `anti-strange`
- `top`, `anti-top`
- `bottom`, `anti-bottom`

- `up`, `anti-up`
- `down`, `anti-down`
- `charm`, `anti-charm`
- `strange`, `anti-strange`
- `top`, `anti-top`
- `bottom`, `anti-bottom`

Leptons:
- `electron`, `positron`
- `electron-neutrino`, `anti-electron-neutrino`
- `muon`, `anti-muon`
- `muon-neutrino`, `anti-muon-neutrino`
- `tau`, `anti-tau`
- `tau-neutrino`, `anti-tau-neutrino`

- `electron`, `positron`
- `electron-neutrino`, `anti-electron-neutrino`
- `muon`, `anti-muon`
- `muon-neutrino`, `anti-muon-neutrino`
- `tau`, `anti-tau`
- `tau-neutrino`, `anti-tau-neutrino`

Gauge & Higgs Bosons:
- `photon`
- `gluon`
- `w-boson`
- `z-boson`
- `higgs`

- `photon`
- `gluon`
- `w-boson`
- `z-boson`
- `higgs`

ABNF:

```
elementary = quark / lepton / boson

quark = quark-anti / quark-normal
qurak-anti = "anti-" quark-normal
quark-normal = "up" / "down" / "charm" / "strange" / "top" / "bottom"

lepton = lepton-anti / lepton-normal
lepton-anti = "positron" / "anti-electron-neutrino" / "anti-muon" / "anti-muon-neutrino" / "anti-tau" / "anti-tau-neutrino"
lepton-normal = "electron" / "electron-neutrino" / "muon" / "muon-neutrino" / "tau" / "tau-neutrino"

boson = "photon" / "gluon" / "w-boson" / "z-boson" / "higgs"
```

### Hadrons and Jets

We currently do not define spellings of hadrons besides the commonly used ones
below and suggest for this version to use `other:` with namings from the
[particle data group (PDG)](http://pdg.lbl.gov/). Other means of grouping e.g.
jets can be used, e.g. additional attributes outside of the definition of this
extension.
below.

For particle species not mentioned here we suggest to use `other:`
with namings from the [particle data group (PDG)](http://pdg.lbl.gov).

Examples:
- `proton`, `anti-proton`
- `neutron`, `anti-neutron`
- `other:sigma`, `other:anti-sigma`
- `other:kaon`, ...

- `proton`, `anti-proton`
- `neutron`, `anti-neutron`
- `other:sigma`, `other:anti-sigma`
- `other:kaon`, ...

> Keep in mind that particle species with `other:` can't be used in
> particle species lists.

ABNF:

```
hadron-or-jet = hadron-or-jet-normal / hadron-or-jet-anti
hadron-or-jet-anti = "anti-" hadron-or-jet-normal
hadron-or-jet-normal = "proton" / "neutron"
```

### Atoms & Isotopes

Element namings follow the abbreviated namings of the periodic table, defined
Valid element names are the symbols of the periodic table, defined
by *The International Union of Pure and Applied Chemistry* (IUPAC).
An example would be `Si` for silicon.

The names are case sensitive.

Specifications of isotopes are denoted by a pound symbol `#` followed
by the isotopic number followed by the chemical symbol, e.g.: `#3He`
for Helium-3.
by the isotopic number followed by an element, e.g.: `#3He` for
Helium-3.

ABNF:

```
atom = element / isotope
isotope = "#" 1*DIGIT element
element = "H" / "He" / "Li" / "Be" / "B" / "C" / "N" / "O" / "F" / "Ne" / "Na" / "Mg" / "Al" / "Si" / "P" / "S" / "Cl" / "Ar" / "K" / "Ca" / "Sc" / "Ti" / "V" / "Cr" / "Mn" / "Fe" / "Co" / "Ni" / "Cu" / "Zn" / "Ga" / "Ge" / "As" / "Se" / "Br" / "Kr" / "Rb" / "Sr" / "Y" / "Zr" / "Nb" / "Mo" / "Tc" / "Ru" / "Rh" / "Pd" / "Ag" / "Cd" / "In" / "Sn" / "Sb" / "Te" / "I" / "Xe" / "Cs" / "Ba" / "La" / "Ce" / "Pr" / "Nd" / "Pm" / "Sm" / "Eu" / "Gd" / "Tb" / "Dy" / "Ho" / "Er" / "Tm" / "Yb" / "Lu" / "Hf" / "Ta" / "W" / "Re" / "Os" / "Ir" / "Pt" / "Au" / "Hg" / "Tl" / "Pb" / "Bi" / "Po" / "At" / "Rn" / "Fr" / "Ra" / "Ac" / "Th" / "Pa" / "U" / "Np" / "Pu" / "Am" / "Cm" / "Bk" / "Cf" / "Es" / "Fm" / "Md" / "No" / "Lr" / "Rf" / "Db" / "Sg" / "Bh" / "Hs" / "Mt" / "Ds" / "Rg" / "Cn" / "Nh" / "Fl" / "Mc" / "Lv" / "Ts" / "Og"
```


The charge state is not encoded by the `speciesType` attribute.
Any extension using this standard can define how to specify the charge state.

### Molecules
The charge state ("ionization") is an attribute of an individual
particle, and therefore an implementation **should not** encode a
charge state as part of the `speciesType` in any way.
In the case that the implementation does treat the charge state
("ionization") as a global, unmodifiable property of the `speciesType`
it **may** encode a charge state in an implementation-defined way.

Use standard chemical notation, e.g.: `H20`.
### Molecules
Molecules are not supported by the `speciesType` attribute.

The isotope prefix can be used with molecules as well.
Examples for heavy water: `#2H2O` for two deuterium and `#2HHO` for one
deuterium.
However, an implementation **may** encode molecules using an
implementation-defined syntax. In this case typical chemical notation
**should** be accepted, e.g. `H2O` for water.