Source code for pyscf.data.elements

#!/usr/bin/env python
# Copyright 2014-2020 The PySCF Developers. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import numpy

ELEMENTS = [
    'X',  # Ghost
    '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',
]
NUC = {x: i for i,x in enumerate(ELEMENTS)}
NUC.update((x.upper(),i) for i,x in enumerate(ELEMENTS))
NUC['GHOST'] = 0
ELEMENTS_PROTON = NUC

ATOMIC_NAMES = [
    'Ghost',
    # IUPAC version dated 28 November 2016
    'Hydrogen', 'Helium', 'Lithium', 'Beryllium', 'Boron',
    'Carbon', 'Nitrogen', 'Oxygen', 'Fluorine', 'Neon',
    'Sodium', 'Magnesium', 'Aluminium', 'Silicon', 'Phosphorus',
    'Sulfur', 'Chlorine', 'Argon', 'Potassium', 'Calcium',
    'Scandium', 'Titanium', 'Vanadium', 'Chromium', 'Manganese',
    'Iron', 'Cobalt', 'Nickel', 'Copper', 'Zinc',
    'Gallium', 'Germanium', 'Arsenic', 'Selenium', 'Bromine',
    'Krypton', 'Rubidium', 'Strontium', 'Yttrium', 'Zirconium',
    'Niobium', 'Molybdenum', 'Technetium', 'Ruthenium', 'Rhodium',
    'Palladium', 'Silver', 'Cadmium', 'Indium', 'Tin',
    'Antimony', 'Tellurium', 'Iodine', 'Xenon', 'Caesium',
    'Barium', 'Lanthanum', 'Cerium', 'Praseodymium', 'Neodymium',
    'Promethium', 'Samarium', 'Europium', 'Gadolinium', 'Terbium',
    'Dysprosium', 'Holmium', 'Erbium', 'Thulium', 'Ytterbium',
    'Lutetium', 'Hafnium', 'Tantalum', 'Tungsten', 'Rhenium',
    'Osmium', 'Iridium', 'Platinum', 'Gold', 'Mercury',
    'Thallium', 'Lead', 'Bismuth', 'Polonium', 'Astatine',
    'Radon', 'Francium', 'Radium', 'Actinium', 'Thorium',
    'Protactinium', 'Uranium', 'Neptunium', 'Plutonium', 'Americium',
    'Curium', 'Berkelium', 'Californium', 'Einsteinium', 'Fermium',
    'Mendelevium', 'Nobelium', 'Lawrencium', 'Rutherfordium', 'Dubnium',
    'Seaborgium', 'Bohrium', 'Hassium', 'Meitnerium', 'Darmastadtium',
    'Roentgenium', 'Copernicium', 'Nihonium', 'Flerovium', 'Moscovium',
    'Livermorium', 'Tennessine', 'Oganesson'
]

ISOTOPE_MAIN = [
    0  ,   # GHOST
    1  ,   # H
    4  ,   # He
    7  ,   # Li
    9  ,   # Be
    11 ,   # B
    12 ,   # C
    14 ,   # N
    16 ,   # O
    19 ,   # F
    20 ,   # Ne
    23 ,   # Na
    24 ,   # Mg
    27 ,   # Al
    28 ,   # Si
    31 ,   # P
    32 ,   # S
    35 ,   # Cl
    40 ,   # Ar
    39 ,   # K
    40 ,   # Ca
    45 ,   # Sc
    48 ,   # Ti
    51 ,   # V
    52 ,   # Cr
    55 ,   # Mn
    56 ,   # Fe
    59 ,   # Co
    58 ,   # Ni
    63 ,   # Cu
    64 ,   # Zn
    69 ,   # Ga
    74 ,   # Ge
    75 ,   # As
    80 ,   # Se
    79 ,   # Br
    84 ,   # Kr
    85 ,   # Rb
    88 ,   # Sr
    89 ,   # Y
    90 ,   # Zr
    93 ,   # Nb
    98 ,   # Mo
    98 ,   # 98Tc
    102,   # Ru
    103,   # Rh
    106,   # Pd
    107,   # Ag
    114,   # Cd
    115,   # In
    120,   # Sn
    121,   # Sb
    130,   # Te
    127,   # I
    132,   # Xe
    133,   # Cs
    138,   # Ba
    139,   # La
    140,   # Ce
    141,   # Pr
    144,   # Nd
    145,   # Pm
    152,   # Sm
    153,   # Eu
    158,   # Gd
    159,   # Tb
    162,   # Dy
    162,   # Ho
    168,   # Er
    169,   # Tm
    174,   # Yb
    175,   # Lu
    180,   # Hf
    181,   # Ta
    184,   # W
    187,   # Re
    192,   # Os
    193,   # Ir
    195,   # Pt
    197,   # Au
    202,   # Hg
    205,   # Tl
    208,   # Pb
    209,   # Bi
    209,   # Po
    210,   # At
    222,   # Rn
    223,   # Fr
    226,   # Ra
    227,   # Ac
    232,   # Th
    231,   # Pa
    238,   # U
    237,   # Np
    244,   # Pu
    243,   # Am
    247,   # Cm
    247,   # Bk
    251,   # Cf
    252,   # Es
    257,   # Fm
    258,   # Md
    259,   # No
    262,   # Lr
    261,   # Rf
    262,   # Db
    263,   # Sg
    262,   # Bh
    265,   # Hs
    266,   # Mt
    0  ,   # Ds
    0  ,   # Rg
    0  ,   # Cn
    0  ,   # Nh
    0  ,   # Fl
    0  ,   # Mc
    0  ,   # Lv
    0  ,   # Ts
    0  ,   # Og
]


# From ase code
#
#    https://wiki.fysik.dtu.dk/ase/index.html
#
# Atomic masses are based on:
#
#   Meija, J., Coplen, T., Berglund, M., et al. (2016). Atomic weights of
#   the elements 2013 (IUPAC Technical Report). Pure and Applied Chemistry,
#   88(3), pp. 265-291. Retrieved 30 Nov. 2016,
#   from doi:10.1515/pac-2015-0305
#
# Standard atomic weights are taken from Table 1: "Standard atomic weights
# 2013", with the uncertainties ignored.
# For hydrogen, helium, boron, carbon, nitrogen, oxygen, magnesium, silicon,
# sulfur, chlorine, bromine and thallium, where the weights are given as a
# range the "conventional" weights are taken from Table 3 and the ranges are
# given in the comments.
# The mass of the most stable isotope (in Table 4) is used for elements
# where there the element has no stable isotopes (to avoid NaNs): Tc, Pm,
# Po, At, Rn, Fr, Ra, Ac, everything after Np
MASSES = [
    0.,                 # GHOST
    1.008,              # H [1.00784, 1.00811]
    4.002602,           # He
    6.94,               # Li [6.938, 6.997]
    9.0121831,          # Be
    10.81,              # B [10.806, 10.821]
    12.011,             # C [12.0096, 12.0116]
    14.007,             # N [14.00643, 14.00728]
    15.999,             # O [15.99903, 15.99977]
    18.998403163,       # F
    20.1797,            # Ne
    22.98976928,        # Na
    24.305,             # Mg [24.304, 24.307]
    26.9815385,         # Al
    28.085,             # Si [28.084, 28.086]
    30.973761998,       # P
    32.06,              # S [32.059, 32.076]
    35.45,              # Cl [35.446, 35.457]
    39.948,             # Ar
    39.0983,            # K
    40.078,             # Ca
    44.955908,          # Sc
    47.867,             # Ti
    50.9415,            # V
    51.9961,            # Cr
    54.938044,          # Mn
    55.845,             # Fe
    58.933194,          # Co
    58.6934,            # Ni
    63.546,             # Cu
    65.38,              # Zn
    69.723,             # Ga
    72.630,             # Ge
    74.921595,          # As
    78.971,             # Se
    79.904,             # Br [79.901, 79.907]
    83.798,             # Kr
    85.4678,            # Rb
    87.62,              # Sr
    88.90584,           # Y
    91.224,             # Zr
    92.90637,           # Nb
    95.95,              # Mo
    97.90721,           # 98Tc
    101.07,             # Ru
    102.90550,          # Rh
    106.42,             # Pd
    107.8682,           # Ag
    112.414,            # Cd
    114.818,            # In
    118.710,            # Sn
    121.760,            # Sb
    127.60,             # Te
    126.90447,          # I
    131.293,            # Xe
    132.90545196,       # Cs
    137.327,            # Ba
    138.90547,          # La
    140.116,            # Ce
    140.90766,          # Pr
    144.242,            # Nd
    144.91276,          # 145Pm
    150.36,             # Sm
    151.964,            # Eu
    157.25,             # Gd
    158.92535,          # Tb
    162.500,            # Dy
    164.93033,          # Ho
    167.259,            # Er
    168.93422,          # Tm
    173.054,            # Yb
    174.9668,           # Lu
    178.49,             # Hf
    180.94788,          # Ta
    183.84,             # W
    186.207,            # Re
    190.23,             # Os
    192.217,            # Ir
    195.084,            # Pt
    196.966569,         # Au
    200.592,            # Hg
    204.38,             # Tl [204.382, 204.385]
    207.2,              # Pb
    208.98040,          # Bi
    208.98243,          # Po
    209.98715,          # At
    222.01758,          # Rn
    223.01974,          # Fr
    226.02541,          # Ra
    227.02775,          # Ac
    232.0377,           # Th
    231.03588,          # Pa
    238.02891,          # U
    237.04817,          # Np
    244.06421,          # Pu
    243.06138,          # Am
    247.07035,          # Cm
    247.07031,          # Bk
    251.07959,          # Cf
    252.0830,           # Es
    257.09511,          # Fm
    258.09843,          # Md
    259.1010,           # No
    262.110,            # Lr
    267.122,            # Rf
    268.126,            # Db
    271.134,            # Sg
    270.133,            # Bh
    269.1338,           # Hs
    278.156,            # Mt
    281.165,            # Ds
    281.166,            # Rg
    285.177,            # Cn
    286.182,            # Nh
    289.190,            # Fl
    289.194,            # Mc
    293.204,            # Lv
    293.208,            # Ts
    294.214,            # Og
]

# Atomic Weights of the most common isotopes
# From https://chemistry.sciences.ncsu.edu/msf/pdf/IsotopicMass_NaturalAbundance.pdf
COMMON_ISOTOPE_MASSES = [
    0.,       # Ghost
    1.007825, # H
    4.002603, # He
    7.016004, # Li
    9.012182, # Be
    11.009305, # B
    12.000000, # C
    14.003074, # N
    15.994915, # O
    18.998403, # F
    19.992440, # Ne
    22.989770, # Na
    23.985042, # Mg
    26.981538, # Al
    27.976927, # Si
    30.973762, # P
    31.972071, # S
    34.968853, # Cl
    39.962383, # Ar
    38.963707, # K
    39.962591, # Ca
    44.955910, # Sc
    47.947947, # Ti
    50.943964, # V
    51.940512, # Cr
    54.938050, # Mn
    55.934942, # Fe
    58.933200, # Co
    57.935348, # Ni
    62.929601, # Cu
    63.929147, # Zn
    68.925581, # Ga
    73.921178, # Ge
    74.921596, # As
    79.916522, # Se
    78.918338, # Br
    83.911507, # Kr
    84.911789, # Rb
    87.905614, # Sr
    88.905848, # Y
    89.904704, # Zr
    92.906378, # Nb
    97.905408, # Mo
    98.907216, # 98
    101.904350, # Ru
    102.905504, # Rh
    105.903483, # Pd
    106.905093, # Ag
    113.903358, # Cd
    114.903878, # In
    119.902197, # Sn
    120.903818, # Sb
    129.906223, # Te
    126.904468, # I
    131.904154, # Xe
    132.905447, # Cs
    137.905241, # Ba
    138.906348, # La
    139.905435, # Ce
    140.907648, # Pr
    141.907719, # Nd
    144.912744, # 14
    151.919729, # Sm
    152.921227, # Eu
    157.924101, # Gd
    158.925343, # Tb
    163.929171, # Dy
    164.930319, # Ho
    165.930290, # Er
    168.934211, # Tm
    173.938858, # Yb
    174.940768, # Lu
    179.946549, # Hf
    180.947996, # Ta
    183.950933, # W
    186.955751, # Re
    191.961479, # Os
    192.962924, # Ir
    194.964774, # Pt
    196.966552, # Au
    201.970626, # Hg
    204.974412, # Tl
    207.976636, # Pb
    208.980383, # Bi
    208.982416, # Po
    209.987131, # At
    222.017570, # Rn
    223.019731, # Fr
    226.025403, # Ra
    227.027747, # Ac
    232.038050, # Th
    231.035879, # Pa
    238.050783, # U
    237.048167, # Np
    244.064198, # Pu
    243.061373, # Am
    247.070347, # Cm
    247.070299, # Bk
    251.079580, # Cf
    252.082972, # Es
    257.095099, # Fm
    258.098425, # Md
    259.101024, # No
    262.109692, # Lr
    267.,       # Rf
    268.,       # Db
    269.,       # Sg
    270.,       # Bh
    270.,       # Hs
    278.,       # Mt
    281.,       # Ds
    282.,       # Rg
    285.,       # Cn
    286.,       # Nh
    289.,       # Fl
    290.,       # Mc
    293.,       # Lv
    294.,       # Ts
    294.        # Og
]

# ground state configuration = (num. electrons for each irrep./angular moment)
CONFIGURATION = [
    [ 0, 0, 0, 0],     #  0  GHOST
    [ 1, 0, 0, 0],     #  1  H
    [ 2, 0, 0, 0],     #  2  He
    [ 3, 0, 0, 0],     #  3  Li
    [ 4, 0, 0, 0],     #  4  Be
    [ 4, 1, 0, 0],     #  5  B
    [ 4, 2, 0, 0],     #  6  C
    [ 4, 3, 0, 0],     #  7  N
    [ 4, 4, 0, 0],     #  8  O
    [ 4, 5, 0, 0],     #  9  F
    [ 4, 6, 0, 0],     # 10  Ne
    [ 5, 6, 0, 0],     # 11  Na
    [ 6, 6, 0, 0],     # 12  Mg
    [ 6, 7, 0, 0],     # 13  Al
    [ 6, 8, 0, 0],     # 14  Si
    [ 6, 9, 0, 0],     # 15  P
    [ 6,10, 0, 0],     # 16  S
    [ 6,11, 0, 0],     # 17  Cl
    [ 6,12, 0, 0],     # 18  Ar
    [ 7,12, 0, 0],     # 19  K
    [ 8,12, 0, 0],     # 20  Ca
    [ 8,12, 1, 0],     # 21  Sc
    [ 8,12, 2, 0],     # 22  Ti
    [ 8,12, 3, 0],     # 23  V
    [ 7,12, 5, 0],     # 24  Cr
    [ 8,12, 5, 0],     # 25  Mn
    [ 8,12, 6, 0],     # 26  Fe
    [ 8,12, 7, 0],     # 27  Co
    [ 8,12, 8, 0],     # 28  Ni
    [ 7,12,10, 0],     # 29  Cu
    [ 8,12,10, 0],     # 30  Zn
    [ 8,13,10, 0],     # 31  Ga
    [ 8,14,10, 0],     # 32  Ge
    [ 8,15,10, 0],     # 33  As
    [ 8,16,10, 0],     # 34  Se
    [ 8,17,10, 0],     # 35  Br
    [ 8,18,10, 0],     # 36  Kr
    [ 9,18,10, 0],     # 37  Rb
    [10,18,10, 0],     # 38  Sr
    [10,18,11, 0],     # 39  Y
    [10,18,12, 0],     # 40  Zr
    [ 9,18,14, 0],     # 41  Nb
    [ 9,18,15, 0],     # 42  Mo
    [10,18,15, 0],     # 43  Tc
    [ 9,18,17, 0],     # 44  Ru
    [ 9,18,18, 0],     # 45  Rh
    [ 8,18,20, 0],     # 46  Pd
    [ 9,18,20, 0],     # 47  Ag
    [10,18,20, 0],     # 48  Cd
    [10,19,20, 0],     # 49  In
    [10,20,20, 0],     # 50  Sn
    [10,21,20, 0],     # 51  Sb
    [10,22,20, 0],     # 52  Te
    [10,23,20, 0],     # 53  I
    [10,24,20, 0],     # 54  Xe
    [11,24,20, 0],     # 55  Cs
    [12,24,20, 0],     # 56  Ba
    [12,24,21, 0],     # 57  La
    [12,24,21, 1],     # 58  Ce
    [12,24,20, 3],     # 59  Pr
    [12,24,20, 4],     # 60  Nd
    [12,24,20, 5],     # 61  Pm
    [12,24,20, 6],     # 62  Sm
    [12,24,20, 7],     # 63  Eu
    [12,24,21, 7],     # 64  Gd
    [12,24,21, 8],     # 65  Tb
    [12,24,20,10],     # 66  Dy
    [12,24,20,11],     # 67  Ho
    [12,24,20,12],     # 68  Er
    [12,24,20,13],     # 69  Tm
    [12,24,20,14],     # 70  Yb
    [12,24,21,14],     # 71  Lu
    [12,24,22,14],     # 72  Hf
    [12,24,23,14],     # 73  Ta
    [12,24,24,14],     # 74  W
    [12,24,25,14],     # 75  Re
    [12,24,26,14],     # 76  Os
    [12,24,27,14],     # 77  Ir
    [11,24,29,14],     # 78  Pt
    [11,24,30,14],     # 79  Au
    [12,24,30,14],     # 80  Hg
    [12,25,30,14],     # 81  Tl
    [12,26,30,14],     # 82  Pb
    [12,27,30,14],     # 83  Bi
    [12,28,30,14],     # 84  Po
    [12,29,30,14],     # 85  At
    [12,30,30,14],     # 86  Rn
    [13,30,30,14],     # 87  Fr
    [14,30,30,14],     # 88  Ra
    [14,30,31,14],     # 89  Ac
    [14,30,32,14],     # 90  Th
    [14,30,31,16],     # 91  Pa
    [14,30,31,17],     # 92  U
    [14,30,31,18],     # 93  Np
    [14,30,30,20],     # 94  Pu
    [14,30,30,21],     # 95  Am
    [14,30,31,21],     # 96  Cm
    [14,30,31,22],     # 97  Bk
    [14,30,30,24],     # 98  Cf
    [14,30,30,25],     # 99  Es
    [14,30,30,26],     #100  Fm
    [14,30,30,27],     #101  Md
    [14,30,30,28],     #102  No
    [14,30,31,28],     #103  Lr
    [14,30,32,28],     #104  Rf
    [14,30,33,28],     #105  Db
    [14,30,34,28],     #106  Sg
    [14,30,35,28],     #107  Bh
    [14,30,36,28],     #108  Hs
    [14,30,37,28],     #109  Mt
    [14,30,38,28],     #110  Ds
    [14,30,39,28],     #111  Rg
    [14,30,40,28],     #112  Cn
    [14,31,40,28],     #113  Nh
    [14,32,40,28],     #114  Fl
    [14,33,40,28],     #115  Mc
    [14,34,40,28],     #116  Lv
    [14,35,40,28],     #117  Ts
    [14,36,40,28],     #118  Og
]

# Non-relativistic spin-restricted spherically averaged Hartree-Fock
# configurations for use in atomic SAD calculations. Reference
# configurations from Phys. Rev. A 101, 012516 (2020).
NRSRHF_CONFIGURATION = [
    [ 0, 0, 0, 0],     #  0  GHOST
    [ 1, 0, 0, 0],     #  1  H
    [ 2, 0, 0, 0],     #  2  He
    [ 3, 0, 0, 0],     #  3  Li
    [ 4, 0, 0, 0],     #  4  Be
    [ 4, 1, 0, 0],     #  5  B
    [ 4, 2, 0, 0],     #  6  C
    [ 4, 3, 0, 0],     #  7  N
    [ 4, 4, 0, 0],     #  8  O
    [ 4, 5, 0, 0],     #  9  F
    [ 4, 6, 0, 0],     # 10  Ne
    [ 5, 6, 0, 0],     # 11  Na
    [ 6, 6, 0, 0],     # 12  Mg
    [ 6, 7, 0, 0],     # 13  Al
    [ 6, 8, 0, 0],     # 14  Si
    [ 6, 9, 0, 0],     # 15  P
    [ 6,10, 0, 0],     # 16  S
    [ 6,11, 0, 0],     # 17  Cl
    [ 6,12, 0, 0],     # 18  Ar
    [ 7,12, 0, 0],     # 19  K
    [ 8,12, 0, 0],     # 20  Ca
    [ 8,13, 0, 0],     # 21  Sc
    [ 8,12, 2, 0],     # 22  Ti
    [ 8,12, 3, 0],     # 23  V
    [ 8,12, 4, 0],     # 24  Cr
    [ 6,12, 7, 0],     # 25  Mn
    [ 6,12, 8, 0],     # 26  Fe
    [ 6,12, 9, 0],     # 27  Co
    [ 6,12,10, 0],     # 28  Ni
    [ 7,12,10, 0],     # 29  Cu
    [ 8,12,10, 0],     # 30  Zn
    [ 8,13,10, 0],     # 31  Ga
    [ 8,14,10, 0],     # 32  Ge
    [ 8,15,10, 0],     # 33  As
    [ 8,16,10, 0],     # 34  Se
    [ 8,17,10, 0],     # 35  Br
    [ 8,18,10, 0],     # 36  Kr
    [ 9,18,10, 0],     # 37  Rb
    [10,18,10, 0],     # 38  Sr
    [10,19,10, 0],     # 39  Y
    [10,18,12, 0],     # 40  Zr
    [10,18,13, 0],     # 41  Nb
    [ 8,18,16, 0],     # 42  Mo
    [ 8,18,17, 0],     # 43  Tc
    [ 8,18,18, 0],     # 44  Ru
    [ 8,18,19, 0],     # 45  Rh
    [ 8,18,20, 0],     # 46  Pd
    [ 9,18,20, 0],     # 47  Ag
    [10,18,20, 0],     # 48  Cd
    [10,19,20, 0],     # 49  In
    [10,20,20, 0],     # 50  Sn
    [10,21,20, 0],     # 51  Sb
    [10,22,20, 0],     # 52  Te
    [10,23,20, 0],     # 53  I
    [10,24,20, 0],     # 54  Xe
    [11,24,20, 0],     # 55  Cs
    [12,24,20, 0],     # 56  Ba
    [12,24,21, 0],     # 57  La
    [12,24,22, 0],     # 58  Ce
    [12,24,21, 2],     # 59  Pr
    [12,24,20, 4],     # 60  Nd
    [12,24,20, 5],     # 61  Pm
    [12,24,20, 6],     # 62  Sm
    [12,24,20, 7],     # 63  Eu
    [11,24,20, 9],     # 64  Gd
    [10,24,20,11],     # 65  Tb
    [10,24,20,12],     # 66  Dy
    [10,24,20,13],     # 67  Ho
    [10,24,20,14],     # 68  Er
    [11,24,20,14],     # 69  Tm
    [12,24,20,14],     # 70  Yb
    [12,25,20,14],     # 71  Lu
    [12,24,22,14],     # 72  Hf
    [12,24,23,14],     # 73  Ta
    [10,24,26,14],     # 74  W
    [10,24,27,14],     # 75  Re
    [10,24,28,14],     # 76  Os
    [10,24,29,14],     # 77  Ir
    [10,24,30,14],     # 78  Pt
    [11,24,30,14],     # 79  Au
    [12,24,30,14],     # 80  Hg
    [12,25,30,14],     # 81  Tl
    [12,26,30,14],     # 82  Pb
    [12,27,30,14],     # 83  Bi
    [12,28,30,14],     # 84  Po
    [12,29,30,14],     # 85  At
    [12,30,30,14],     # 86  Rn
    [13,30,30,14],     # 87  Fr
    [14,30,30,14],     # 88  Ra
    [14,30,31,14],     # 89  Ac
    [14,30,32,14],     # 90  Th
    [14,30,30,17],     # 91  Pa
    [14,30,30,18],     # 92  U
    [14,30,30,19],     # 93  Np
    [13,30,30,21],     # 94  Pu
    [12,30,30,23],     # 95  Am
    [12,30,30,24],     # 96  Cm
    [12,30,30,25],     # 97  Bk
    [12,30,30,26],     # 98  Cf
    [12,30,30,27],     # 99  Es
    [12,30,30,28],     #100  Fm
    [13,30,30,28],     #101  Md
    [14,30,30,28],     #102  No
    [14,30,31,28],     #103  Lr
    [14,30,32,28],     #104  Rf
    [14,30,33,28],     #105  Db
    [12,30,36,28],     #106  Sg
    [12,30,37,28],     #107  Bh
    [12,30,38,28],     #108  Hs
    [12,30,39,28],     #109  Mt
    [12,30,40,28],     #110  Ds
    [13,30,40,28],     #111  Rg
    [14,30,40,28],     #112  Cn
    [14,31,40,28],     #113  Nh
    [14,32,40,28],     #114  Fl
    [14,33,40,28],     #115  Mc
    [14,34,40,28],     #116  Lv
    [14,35,40,28],     #117  Ts
    [14,36,40,28],     #118  Og
]

# Non-relativistic spin-restricted spherically averaged exchange-only
# LDA a.k.a. Hartree-Fock-Slater configurations for use in atomic SAD
# calculations. Reference configurations from Phys. Rev. A 101, 012516
# (2020).
NRSRHFS_CONFIGURATION = [
    [ 0, 0, 0, 0],     #  0  GHOST
    [ 1, 0, 0, 0],     #  1  H
    [ 2, 0, 0, 0],     #  2  He
    [ 3, 0, 0, 0],     #  3  Li
    [ 4, 0, 0, 0],     #  4  Be
    [ 4, 1, 0, 0],     #  5  B
    [ 4, 2, 0, 0],     #  6  C
    [ 4, 3, 0, 0],     #  7  N
    [ 4, 4, 0, 0],     #  8  O
    [ 4, 5, 0, 0],     #  9  F
    [ 4, 6, 0, 0],     # 10  Ne
    [ 5, 6, 0, 0],     # 11  Na
    [ 6, 6, 0, 0],     # 12  Mg
    [ 6, 7, 0, 0],     # 13  Al
    [ 6, 8, 0, 0],     # 14  Si
    [ 6, 9, 0, 0],     # 15  P
    [ 6,10, 0, 0],     # 16  S
    [ 6,11, 0, 0],     # 17  Cl
    [ 6,12, 0, 0],     # 18  Ar
    [ 7,12, 0, 0],     # 19  K
    [ 8,12, 0, 0],     # 20  Ca
    [ 8,12, 1, 0],     # 21  Sc
    [ 8,12, 2, 0],     # 22  Ti
    [ 8,12, 3, 0],     # 23  V
    [ 8,12, 4, 0],     # 24  Cr
    [ 7,12, 6, 0],     # 25  Mn
    [ 7,12, 7, 0],     # 26  Fe
    [ 7,12, 8, 0],     # 27  Co
    [ 7,12, 9, 0],     # 28  Ni
    [ 7,12,10, 0],     # 29  Cu
    [ 8,12,10, 0],     # 30  Zn
    [ 8,13,10, 0],     # 31  Ga
    [ 8,14,10, 0],     # 32  Ge
    [ 8,15,10, 0],     # 33  As
    [ 8,16,10, 0],     # 34  Se
    [ 8,17,10, 0],     # 35  Br
    [ 8,18,10, 0],     # 36  Kr
    [ 9,18,10, 0],     # 37  Rb
    [10,18,10, 0],     # 38  Sr
    [10,18,11, 0],     # 39  Y
    [10,18,12, 0],     # 40  Zr
    [10,18,13, 0],     # 41  Nb
    [ 9,18,15, 0],     # 42  Mo
    [ 9,18,16, 0],     # 43  Tc
    [ 8,18,18, 0],     # 44  Ru
    [ 8,18,19, 0],     # 45  Rh
    [ 8,18,20, 0],     # 46  Pd
    [ 9,18,20, 0],     # 47  Ag
    [10,18,20, 0],     # 48  Cd
    [10,19,20, 0],     # 49  In
    [10,20,20, 0],     # 50  Sn
    [10,21,20, 0],     # 51  Sb
    [10,22,20, 0],     # 52  Te
    [10,23,20, 0],     # 53  I
    [10,24,20, 0],     # 54  Xe
    [11,24,20, 0],     # 55  Cs
    [12,24,20, 0],     # 56  Ba
    [12,24,20, 1],     # 57  La
    [12,24,20, 2],     # 58  Ce
    [12,24,20, 3],     # 59  Pr
    [12,24,20, 4],     # 60  Nd
    [12,24,20, 5],     # 61  Pm
    [12,24,20, 6],     # 62  Sm
    [12,24,20, 7],     # 63  Eu
    [12,24,20, 8],     # 64  Gd
    [12,24,20, 9],     # 65  Tb
    [12,24,20,10],     # 66  Dy
    [12,24,20,11],     # 67  Ho
    [12,24,20,12],     # 68  Er
    [12,24,20,13],     # 69  Tm
    [12,24,20,14],     # 70  Yb
    [12,24,21,14],     # 71  Lu
    [12,24,22,14],     # 72  Hf
    [12,24,23,14],     # 73  Ta
    [11,24,25,14],     # 74  W
    [11,24,26,14],     # 75  Re
    [10,24,28,14],     # 76  Os
    [10,24,29,14],     # 77  Ir
    [10,24,30,14],     # 78  Pt
    [11,24,30,14],     # 79  Au
    [12,24,30,14],     # 80  Hg
    [12,25,30,14],     # 81  Tl
    [12,26,30,14],     # 82  Pb
    [12,27,30,14],     # 83  Bi
    [12,28,30,14],     # 84  Po
    [12,29,30,14],     # 85  At
    [12,30,30,14],     # 86  Rn
    [13,30,30,14],     # 87  Fr
    [14,30,30,14],     # 88  Ra
    [14,30,30,15],     # 89  Ac
    [14,30,30,16],     # 90  Th
    [14,30,30,17],     # 91  Pa
    [13,30,30,19],     # 92  U
    [13,30,30,20],     # 93  Np
    [13,30,30,21],     # 94  Pu
    [13,30,30,22],     # 95  Am
    [13,30,30,23],     # 96  Cm
    [13,30,30,24],     # 97  Bk
    [13,30,30,25],     # 98  Cf
    [13,30,30,26],     # 99  Es
    [13,30,30,27],     #100  Fm
    [13,30,30,28],     #101  Md
    [14,30,30,28],     #102  No
    [14,30,31,28],     #103  Lr
    [14,30,32,28],     #104  Rf
    [13,30,34,28],     #105  Db
    [12,30,36,28],     #106  Sg
    [12,30,37,28],     #107  Bh
    [12,30,38,28],     #108  Hs
    [12,30,39,28],     #109  Mt
    [12,30,40,28],     #110  Ds
    [13,30,40,28],     #111  Rg
    [14,30,40,28],     #112  Cn
    [14,31,40,28],     #113  Nh
    [14,32,40,28],     #114  Fl
    [14,33,40,28],     #115  Mc
    [14,34,40,28],     #116  Lv
    [14,35,40,28],     #117  Ts
    [14,36,40,28],     #118  Og
]

# This is No. of shells, not the atomic configurations
#     core       core+valence
# core+valence = lambda nuc, l: \
#            int(numpy.ceil(pyscf.lib.parameters.ELEMENTS[nuc][2][l]/(4*l+2.)))
N_CORE_SHELLS = [
    '0s0p0d0f',         #  0  GHOST
    '0s0p0d0f',         #  1  H
    '0s0p0d0f',         #  2  He
    '1s0p0d0f',         #  3  Li
    '1s0p0d0f',         #  4  Be
    '1s0p0d0f',         #  5  B
    '1s0p0d0f',         #  6  C
    '1s0p0d0f',         #  7  N
    '1s0p0d0f',         #  8  O
    '1s0p0d0f',         #  9  F
    '1s0p0d0f',         # 10  Ne
    '2s1p0d0f',         # 11  Na
    '2s1p0d0f',         # 12  Mg
    '2s1p0d0f',         # 13  Al
    '2s1p0d0f',         # 14  Si
    '2s1p0d0f',         # 15  P
    '2s1p0d0f',         # 16  S
    '2s1p0d0f',         # 17  Cl
    '2s1p0d0f',         # 18  Ar
    '3s2p0d0f',         # 19  K
    '3s2p0d0f',         # 20  Ca
    '3s2p0d0f',         # 21  Sc
    '3s2p0d0f',         # 22  Ti
    '3s2p0d0f',         # 23  V
    '3s2p0d0f',         # 24  Cr
    '3s2p0d0f',         # 25  Mn
    '3s2p0d0f',         # 26  Fe
    '3s2p0d0f',         # 27  Co
    '3s2p0d0f',         # 28  Ni
    '3s2p0d0f',         # 29  Cu
    '3s2p0d0f',         # 30  Zn
    '3s2p1d0f',         # 31  Ga
    '3s2p1d0f',         # 32  Ge
    '3s2p1d0f',         # 33  As
    '3s2p1d0f',         # 34  Se
    '3s2p1d0f',         # 35  Br
    '3s2p1d0f',         # 36  Kr
    '4s3p1d0f',         # 37  Rb
    '4s3p1d0f',         # 38  Sr
    '4s3p1d0f',         # 39  Y
    '4s3p1d0f',         # 40  Zr
    '4s3p1d0f',         # 41  Nb
    '4s3p1d0f',         # 42  Mo
    '4s3p1d0f',         # 43  Tc
    '4s3p1d0f',         # 44  Ru
    '4s3p1d0f',         # 45  Rh
    '4s3p1d0f',         # 46  Pd
    '4s3p1d0f',         # 47  Ag
    '4s3p1d0f',         # 48  Cd
    '4s3p2d0f',         # 49  In
    '4s3p2d0f',         # 50  Sn
    '4s3p2d0f',         # 51  Sb
    '4s3p2d0f',         # 52  Te
    '4s3p2d0f',         # 53  I
    '4s3p2d0f',         # 54  Xe
    '5s4p2d0f',         # 55  Cs
    '5s4p2d0f',         # 56  Ba
    '5s4p2d0f',         # 57  La
    '5s4p2d0f',         # 58  Ce
    '5s4p2d0f',         # 59  Pr
    '5s4p2d0f',         # 60  Nd
    '5s4p2d0f',         # 61  Pm
    '5s4p2d0f',         # 62  Sm
    '5s4p2d0f',         # 63  Eu
    '5s4p2d0f',         # 64  Gd
    '5s4p2d0f',         # 65  Tb
    '5s4p2d0f',         # 66  Dy
    '5s4p2d0f',         # 67  Ho
    '5s4p2d0f',         # 68  Er
    '5s4p2d0f',         # 69  Tm
    '5s4p2d0f',         # 70  Yb
    '5s4p2d1f',         # 71  Lu
    '5s4p2d1f',         # 72  Hf
    '5s4p2d1f',         # 73  Ta
    '5s4p2d1f',         # 74  W
    '5s4p2d1f',         # 75  Re
    '5s4p2d1f',         # 76  Os
    '5s4p2d1f',         # 77  Ir
    '5s4p2d1f',         # 78  Pt
    '5s4p2d1f',         # 79  Au
    '5s4p2d1f',         # 80  Hg
    '5s4p3d1f',         # 81  Tl
    '5s4p3d1f',         # 82  Pb
    '5s4p3d1f',         # 83  Bi
    '5s4p3d1f',         # 84  Po
    '5s4p3d1f',         # 85  At
    '5s4p3d1f',         # 86  Rn
    '6s5p3d1f',         # 87  Fr
    '6s5p3d1f',         # 88  Ra
    '6s5p3d1f',         # 89  Ac
    '6s5p3d1f',         # 90  Th
    '6s5p3d1f',         # 91  Pa
    '6s5p3d1f',         # 92  U
    '6s5p3d1f',         # 93  Np
    '6s5p3d1f',         # 94  Pu
    '6s5p3d1f',         # 95  Am
    '6s5p3d1f',         # 96  Cm
    '6s5p3d1f',         # 97  Bk
    '6s5p3d1f',         # 98  Cf
    '6s5p3d1f',         # 99  Es
    '6s5p3d1f',         #100  Fm
    '6s5p3d1f',         #101  Md
    '6s5p3d1f',         #102  No
    '6s5p3d2f',         #103  Lr
    '6s5p3d2f',         #104  Rf
    '6s5p3d2f',         #105  Db
    '6s5p3d2f',         #106  Sg
    '6s5p3d2f',         #107  Bh
    '6s5p3d2f',         #108  Hs
    '6s5p3d2f',         #109  Mt
    '6s5p3d2f',         #110  Ds
    '6s5p3d2f',         #111  Rg
    '6s5p3d2f',         #112  Cn
    '6s5p4d2f',         #113  Nh
    '6s5p4d2f',         #114  Fl
    '6s5p4d2f',         #115  Mc
    '6s5p4d2f',         #116  Lv
    '6s3p4d2f',         #117  Ts
    '6s3p4d2f',         #118  Og
]


N_CORE_VALENCE_SHELLS = [
    '0s0p0d0f',         #  0  GHOST
    '1s0p0d0f',         #  1  H
    '1s0p0d0f',         #  2  He
    '2s0p0d0f',         #  3  Li
    '2s0p0d0f',         #  4  Be
    '2s1p0d0f',         #  5  B
    '2s1p0d0f',         #  6  C
    '2s1p0d0f',         #  7  N
    '2s1p0d0f',         #  8  O
    '2s1p0d0f',         #  9  F
    '2s1p0d0f',         # 10  Ne
    '3s1p0d0f',         # 11  Na
    '3s1p0d0f',         # 12  Mg
    '3s2p0d0f',         # 13  Al
    '3s2p0d0f',         # 14  Si
    '3s2p0d0f',         # 15  P
    '3s2p0d0f',         # 16  S
    '3s2p0d0f',         # 17  Cl
    '3s2p0d0f',         # 18  Ar
    '4s2p0d0f',         # 19  K
    '4s2p0d0f',         # 20  Ca
    '4s2p1d0f',         # 21  Sc
    '4s2p1d0f',         # 22  Ti
    '4s2p1d0f',         # 23  V
    '4s2p1d0f',         # 24  Cr
    '4s2p1d0f',         # 25  Mn
    '4s2p1d0f',         # 26  Fe
    '4s2p1d0f',         # 27  Co
    '4s2p1d0f',         # 28  Ni
    '4s2p1d0f',         # 29  Cu
    '4s2p1d0f',         # 30  Zn
    '4s3p1d0f',         # 31  Ga
    '4s3p1d0f',         # 32  Ge
    '4s3p1d0f',         # 33  As
    '4s3p1d0f',         # 34  Se
    '4s3p1d0f',         # 35  Br
    '4s3p1d0f',         # 36  Kr
    '5s3p1d0f',         # 37  Rb
    '5s3p1d0f',         # 38  Sr
    '5s3p2d0f',         # 39  Y
    '5s3p2d0f',         # 40  Zr
    '5s3p2d0f',         # 41  Nb
    '5s3p2d0f',         # 42  Mo
    '5s3p2d0f',         # 43  Tc
    '5s3p2d0f',         # 44  Ru
    '5s3p2d0f',         # 45  Rh
    '4s3p2d0f',         # 46  Pd
    '5s3p2d0f',         # 47  Ag
    '5s3p2d0f',         # 48  Cd
    '5s4p2d0f',         # 49  In
    '5s4p2d0f',         # 50  Sn
    '5s4p2d0f',         # 51  Sb
    '5s4p2d0f',         # 52  Te
    '5s4p2d0f',         # 53  I
    '5s4p2d0f',         # 54  Xe
    '6s4p2d0f',         # 55  Cs
    '6s4p2d0f',         # 56  Ba
    '6s4p3d0f',         # 57  La
    '6s4p3d1f',         # 58  Ce
    '6s4p2d1f',         # 59  Pr
    '6s4p2d1f',         # 60  Nd
    '6s4p2d1f',         # 61  Pm
    '6s4p2d1f',         # 62  Sm
    '6s4p2d1f',         # 63  Eu
    '6s4p3d1f',         # 64  Gd
    '6s4p3d1f',         # 65  Tb
    '6s4p2d1f',         # 66  Dy
    '6s4p2d1f',         # 67  Ho
    '6s4p2d1f',         # 68  Er
    '6s4p2d1f',         # 69  Tm
    '6s4p2d1f',         # 70  Yb
    '6s4p3d1f',         # 71  Lu
    '6s4p3d1f',         # 72  Hf
    '6s4p3d1f',         # 73  Ta
    '6s4p3d1f',         # 74  W
    '6s4p3d1f',         # 75  Re
    '6s4p3d1f',         # 76  Os
    '6s4p3d1f',         # 77  Ir
    '6s4p3d1f',         # 78  Pt
    '6s4p3d1f',         # 79  Au
    '6s4p3d1f',         # 80  Hg
    '6s5p3d1f',         # 81  Tl
    '6s5p3d1f',         # 82  Pb
    '6s5p3d1f',         # 83  Bi
    '6s5p3d1f',         # 84  Po
    '6s5p3d1f',         # 85  At
    '6s5p3d1f',         # 86  Rn
    '7s5p3d1f',         # 87  Fr
    '7s5p3d1f',         # 88  Ra
    '7s5p4d1f',         # 89  Ac
    '7s5p4d1f',         # 90  Th
    '7s5p4d2f',         # 91  Pa
    '7s5p4d2f',         # 92  U
    '7s5p4d2f',         # 93  Np
    '7s5p3d2f',         # 94  Pu
    '7s5p3d2f',         # 95  Am
    '7s5p4d2f',         # 96  Cm
    '7s5p4d2f',         # 97  Bk
    '7s5p3d2f',         # 98  Cf
    '7s5p3d2f',         # 99  Es
    '7s5p3d2f',         #100  Fm
    '7s5p3d2f',         #101  Md
    '7s5p3d2f',         #102  No
    '7s5p4d2f',         #103  Lr
    '7s5p4d2f',         #104  Rf
    '7s5p4d2f',         #105  Db
    '7s5p4d2f',         #106  Sg
    '7s5p4d2f',         #107  Bh
    '7s5p4d2f',         #108  Hs
    '7s5p4d2f',         #109  Mt
    '7s5p4d2f',         #110  Ds
    '7s5p4d2f',         #111  Rg
    '7s5p4d2f',         #112  Cn
    '7s6p4d2f',         #113  Nh
    '7s6p4d2f',         #114  Fl
    '7s6p4d2f',         #115  Mc
    '7s6p4d2f',         #116  Lv
    '7s6p4d2f',         #117  Ts
    '7s6p4d2f',         #118  Og
]

chemcore_atm = [
    0, # ghost
    0,                                                                  0,
    0,  0,                                          1,  1,  1,  1,  1,  1,
    1,  1,                                          5,  5,  5,  5,  5,  5,
    5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  9,  9,  9,  9,  9,  9,
    9,  9, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 18, 18, 18, 18, 18, 18,
    18, 18,
    # lanthanides
    18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 23,
    23, 23, 23, 23, 23, 23, 23, 23, 23, 34, 34, 34, 34, 34, 34,
    34, 34,
    # actinides
    34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
    50, 50, 50, 50, 50, 50, 50, 50, 50, 55, 55, 55, 55, 55, 55]

[docs] def chemcore(mol, spinorb=False): ''' Set spinorb=True for GMP2, GCCSD, etc. For R/U ones, spinorb=False is fine. ''' core = 0 for a in range(mol.natm): atm_nelec = mol.atom_charge(a) atm_z = charge(mol.atom_symbol(a)) ne_ecp = atm_z - atm_nelec ncore_ecp = ne_ecp // 2 atm_ncore = chemcore_atm[atm_z] if ncore_ecp > atm_ncore: core += 0 else: core += atm_ncore - ncore_ecp if spinorb: core *= 2 return core
#def chemcore_list(mol): # ncore = chemcore(mol) # return list(range(ncore)) ######################################## # # Some functions to format atomic symbol # ######################################## def _rm_digit(symb): if symb.isalpha(): return symb else: return ''.join([i for i in symb if i.isalpha()]) _ELEMENTS_UPPER = {x.upper(): x for x in ELEMENTS} _ELEMENTS_UPPER['GHOST'] = 'Ghost'
[docs] def charge(symb_or_chg): if isinstance(symb_or_chg, str): a = str(symb_or_chg.strip().upper()) if (a[:5] == 'GHOST' or (a[0] == 'X' and a[:2] != 'XE')): return 0 else: return ELEMENTS_PROTON[_rm_digit(a)] else: return symb_or_chg
def _symbol(symb_or_chg): if isinstance(symb_or_chg, str): return str(symb_or_chg) else: return ELEMENTS[symb_or_chg] def _std_symbol(symb_or_chg): '''For a given atom symbol (lower case or upper case) or charge, return the standardized atom symbol (without the numeric prefix or suffix) ''' if isinstance(symb_or_chg, str): symb_or_chg = str(symb_or_chg.upper()) rawsymb = _rm_digit(symb_or_chg) if rawsymb in _ELEMENTS_UPPER: return _ELEMENTS_UPPER[rawsymb] elif len(rawsymb) > 1 and symb_or_chg[0] == 'X' and symb_or_chg[:2] != 'XE': rawsymb = rawsymb[1:] # Remove the prefix X return 'X-' + _ELEMENTS_UPPER[rawsymb] elif len(rawsymb) > 5 and rawsymb[:5] == 'GHOST': rawsymb = rawsymb[5:] # Remove the prefix GHOST return 'GHOST-' + _ELEMENTS_UPPER[rawsymb] else: raise RuntimeError('Unsupported atom symbol %s' % symb_or_chg) else: return ELEMENTS[symb_or_chg] def _std_symbol_without_ghost(symb_or_chg): '''For a given atom symbol (lower case or upper case) or charge, return the standardized atom symbol ''' if isinstance(symb_or_chg, str): symb_or_chg = str(symb_or_chg.upper()) rawsymb = _rm_digit(symb_or_chg) if rawsymb in _ELEMENTS_UPPER: return _ELEMENTS_UPPER[rawsymb] elif len(rawsymb) > 1 and symb_or_chg[0] == 'X' and symb_or_chg[:2] != 'XE': rawsymb = rawsymb[1:] # Remove the prefix X return _ELEMENTS_UPPER[rawsymb] elif len(rawsymb) > 5 and rawsymb[:5] == 'GHOST': rawsymb = rawsymb[5:] # Remove the prefix GHOST return _ELEMENTS_UPPER[rawsymb] else: raise RuntimeError('Unsupported atom symbol %s' % symb_or_chg) else: return ELEMENTS[symb_or_chg] def _atom_symbol(symb_or_chg): '''For a given atom symbol (lower case or upper case) or charge, return the standardized atom symbol (with the numeric prefix or suffix) ''' if isinstance(symb_or_chg, str): a = str(symb_or_chg.strip().upper()) if a.isdigit(): symb = ELEMENTS[int(a)] else: rawsymb = _rm_digit(a) if rawsymb not in _ELEMENTS_UPPER: # likely a ghost atom if len(rawsymb) > 1 and a[0] == 'X' and a[:2] != 'XE': rawsymb = rawsymb[1:] # Remove the prefix X # put hyphen between X prefix and the atomic symbol if a[1].isalpha(): a = a[0] + '-' + a[1:] else: a = a[0] + '-' + a[2:] elif len(rawsymb) > 5 and rawsymb[:5] == 'GHOST': rawsymb = rawsymb[5:] # Remove the prefix GHOST # put hyphen between Ghost prefix and the atomic symbol if a[5].isalpha(): a = a[:5] + '-' + a[5:] elif a[5] != '-': a = a[:5] + '-' + a[6:] else: raise RuntimeError('Unsupported atom symbol %s' % a) stdsymb = _ELEMENTS_UPPER[rawsymb] symb = a.replace(rawsymb, stdsymb) else: symb = ELEMENTS[symb_or_chg] return symb
[docs] def is_ghost_atom(symb_or_chg): if isinstance(symb_or_chg, (int, numpy.integer)): return symb_or_chg == 0 elif 'GHOST' in symb_or_chg.upper(): return True else: return symb_or_chg[0] == 'X' and symb_or_chg[:2].upper() != 'XE'