本文整理汇总了Python中pymatgen.core.periodic_table.Element.is_valid_symbol方法的典型用法代码示例。如果您正苦于以下问题:Python Element.is_valid_symbol方法的具体用法?Python Element.is_valid_symbol怎么用?Python Element.is_valid_symbol使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pymatgen.core.periodic_table.Element
的用法示例。
在下文中一共展示了Element.is_valid_symbol方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: from_dict
# 需要导入模块: from pymatgen.core.periodic_table import Element [as 别名]
# 或者: from pymatgen.core.periodic_table.Element import is_valid_symbol [as 别名]
def from_dict(cls, d, lattice=None):
"""
Create PeriodicSite from dict representation.
Args:
d (dict): dict representation of PeriodicSite
lattice: Optional lattice to override lattice specified in d.
Useful for ensuring all sites in a structure share the same
lattice.
Returns:
PeriodicSite
"""
atoms_n_occu = {}
for sp_occu in d["species"]:
if "oxidation_state" in sp_occu and Element.is_valid_symbol(
sp_occu["element"]):
sp = Specie.from_dict(sp_occu)
elif "oxidation_state" in sp_occu:
sp = DummySpecie.from_dict(sp_occu)
else:
sp = Element(sp_occu["element"])
atoms_n_occu[sp] = sp_occu["occu"]
props = d.get("properties", None)
lattice = lattice if lattice else Lattice.from_dict(d["lattice"])
return cls(atoms_n_occu, d["abc"], lattice, properties=props)
示例2: _parse_chomp_and_rank
# 需要导入模块: from pymatgen.core.periodic_table import Element [as 别名]
# 或者: from pymatgen.core.periodic_table.Element import is_valid_symbol [as 别名]
def _parse_chomp_and_rank(m, f, m_dict, m_points):
"""
A helper method for formula parsing that helps in interpreting and
ranking indeterminate formulas
Author: Anubhav Jain
Args:
m: A regex match, with the first group being the element and
the second group being the amount
f: The formula part containing the match
m_dict: A symbol:amt dictionary from the previously parsed
formula
m_points: Number of points gained from the previously parsed
formula
Returns:
A tuple of (f, m_dict, points) where m_dict now contains data
from the match and the match has been removed (chomped) from
the formula f. The "goodness" of the match determines the
number of points returned for chomping. Returns
(None, None, None) if no element could be found...
"""
points = 0
# Points awarded if the first element of the element is correctly
# specified as a capital
points_first_capital = 100
# Points awarded if the second letter of the element is correctly
# specified as lowercase
points_second_lowercase = 100
#get element and amount from regex match
el = m.group(1)
if len(el) > 2 or len(el) < 1:
raise CompositionError("Invalid element symbol entered!")
amt = float(m.group(2)) if m.group(2).strip() != "" else 1
#convert the element string to proper [uppercase,lowercase] format
#and award points if it is already in that format
char1 = el[0]
char2 = el[1] if len(el) > 1 else ""
if char1 == char1.upper():
points += points_first_capital
if char2 and char2 == char2.lower():
points += points_second_lowercase
el = char1.upper() + char2.lower()
#if it's a valid element, chomp and add to the points
if Element.is_valid_symbol(el):
if el in m_dict:
m_dict[el] += amt * factor
else:
m_dict[el] = amt * factor
return f.replace(m.group(), "", 1), m_dict, m_points + points
#else return None
return None, None, None
示例3: validate
# 需要导入模块: from pymatgen.core.periodic_table import Element [as 别名]
# 或者: from pymatgen.core.periodic_table.Element import is_valid_symbol [as 别名]
def validate(self, value):
if not all(Element.is_valid_symbol(k) for k in value.keys()):
self.error('Keys should be element symbols')
if not all(isinstance(v, (float, int)) for v in value.values()):
self.error('Values should be numbers')
super(DictField, self).validate(value)
示例4: from_string
# 需要导入模块: from pymatgen.core.periodic_table import Element [as 别名]
# 或者: from pymatgen.core.periodic_table.Element import is_valid_symbol [as 别名]
def from_string(data):
"""
Reads the exciting input from a string
"""
root=ET.fromstring(data)
speciesnode=root.find('structure').iter('species')
elements = []
positions = []
vectors=[]
lockxyz=[]
# get title
title_in=str(root.find('title').text)
# Read elements and coordinates
for nodes in speciesnode:
symbol = nodes.get('speciesfile').split('.')[0]
if len(symbol.split('_'))==2:
symbol=symbol.split('_')[0]
if Element.is_valid_symbol(symbol):
# Try to recognize the element symbol
element = symbol
else:
raise NLValueError("Unknown element!")
natoms = nodes.getiterator('atom')
for atom in natoms:
x, y, z = atom.get('coord').split()
positions.append([float(x), float(y), float(z)])
elements.append(element)
# Obtain lockxyz for each atom
if atom.get('lockxyz') is not None:
lxy=[]
for l in atom.get('lockxyz').split():
if l=='True' or l=='true':
lxyz.append(True)
else:
lxyz.append(False)
lockxyz.append(lxyz)
else:
lockxyz.append([False, False, False])
#check the atomic positions type
if 'cartesian' in root.find('structure').attrib.keys():
if root.find('structure').attrib['cartesian']:
cartesian=True
for i in range(len(positions)):
for j in range(3):
positions[i][j]=positions[i][j]*ExcitingInput.bohr2ang
print(positions)
else:
cartesian=False
# get the scale attribute
scale_in=root.find('structure').find('crystal').get('scale')
if scale_in:
scale=float(scale_in)*ExcitingInput.bohr2ang
else:
scale=ExcitingInput.bohr2ang
# get the stretch attribute
stretch_in=root.find('structure').find('crystal').get('stretch')
if stretch_in:
stretch=np.array([float(a) for a in stretch_in])
else:
stretch=np.array([1.0,1.0,1.0])
# get basis vectors and scale them accordingly
basisnode=root.find('structure').find('crystal').iter('basevect')
for vect in basisnode:
x, y, z=vect.text.split()
vectors.append([float(x)*stretch[0]*scale,
float(y)*stretch[1]*scale,
float(z)*stretch[2]*scale])
# create lattice and structure object
lattice_in=Lattice(vectors)
structure_in=Structure(lattice_in,elements,positions,coords_are_cartesian=cartesian)
return ExcitingInput(structure_in, title_in, lockxyz)
示例5: from_string
# 需要导入模块: from pymatgen.core.periodic_table import Element [as 别名]
# 或者: from pymatgen.core.periodic_table.Element import is_valid_symbol [as 别名]
def from_string(data, default_names=None):
"""
Reads a Poscar from a string.
The code will try its best to determine the elements in the POSCAR in
the following order:
1. If default_names are supplied and valid, it will use those. Usually,
default names comes from an external source, such as a POTCAR in the
same directory.
2. If there are no valid default names but the input file is Vasp5-like
and contains element symbols in the 6th line, the code will use that.
3. Failing (2), the code will check if a symbol is provided at the end
of each coordinate.
If all else fails, the code will just assign the first n elements in
increasing atomic number, where n is the number of species, to the
Poscar. For example, H, He, Li, .... This will ensure at least a
unique element is assigned to each site and any analysis that does not
require specific elemental properties should work fine.
Args:
data:
string containing Poscar data.
default_names:
default symbols for the POSCAR file, usually coming from a
POTCAR in the same directory.
Returns:
Poscar object.
"""
chunks = re.split("^\s*$", data.strip(), flags=re.MULTILINE)
#Parse positions
lines = tuple(clean_lines(chunks[0].split("\n"), False))
comment = lines[0]
scale = float(lines[1])
lattice = np.array([map(float, line.split())
for line in lines[2:5]])
if scale < 0:
# In vasp, a negative scale factor is treated as a volume. We need
# to translate this to a proper lattice vector scaling.
vol = abs(det(lattice))
lattice *= (-scale / vol) ** (1 / 3)
else:
lattice *= scale
vasp5_symbols = False
try:
natoms = map(int, lines[5].split())
ipos = 6
except ValueError:
vasp5_symbols = True
symbols = lines[5].split()
natoms = map(int, lines[6].split())
atomic_symbols = list()
for i in xrange(len(natoms)):
atomic_symbols.extend([symbols[i]] * natoms[i])
ipos = 7
postype = lines[ipos].split()[0]
sdynamics = False
# Selective dynamics
if postype[0] in "sS":
sdynamics = True
ipos += 1
postype = lines[ipos].split()[0]
cart = postype[0] in "cCkK"
nsites = sum(natoms)
# If default_names is specified (usually coming from a POTCAR), use
# them. This is in line with Vasp"s parsing order that the POTCAR
# specified is the default used.
if default_names:
try:
atomic_symbols = []
for i in xrange(len(natoms)):
atomic_symbols.extend([default_names[i]] * natoms[i])
vasp5_symbols = True
except IndexError:
pass
if not vasp5_symbols:
ind = 3 if not sdynamics else 6
try:
#check if names are appended at the end of the coordinates.
atomic_symbols = [l.split()[ind]
for l in lines[ipos + 1:ipos + 1 + nsites]]
#Ensure symbols are valid elements
if not all([Element.is_valid_symbol(sym)
for sym in atomic_symbols]):
raise ValueError("Non-valid symbols detected.")
vasp5_symbols = True
except (ValueError, IndexError):
#Defaulting to false names.
atomic_symbols = []
for i in xrange(len(natoms)):
sym = Element.from_Z(i + 1).symbol
#.........这里部分代码省略.........