ase when b.G5_TYPE is not null then b.G5_TYPE='1' else '/' end as if_5g
时间: 2024-04-13 11:29:42 浏览: 117
您好!对于您的问题,您可以使用以下代码来实现:
```
CASE
WHEN b.G5_TYPE IS NOT NULL THEN '1'
ELSE '/'
END AS if_5g
```
这段代码基于条件 `b.G5_TYPE is not null` ,如果条件成立,则将 `b.G5_TYPE` 的值设置为 `'1'`,否则设置为 `'/'`。最后,将结果赋值给别名 `if_5g`。
请注意,这只是一个示例,具体的实现可能因您的具体需求而有所不同。如果您有其他问题,请随时提问!
相关问题
ImportError: cannot import name 'crystal' from 'ase.geometry' (/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/geometry/__init__.py)
由于ASE库版本更新,ASE现在已经没有crystal模块了。如果您需要使用ASE的晶体结构生成功能,可以使用ase.build模块中的相关函数,比如make_supercell、bulk和molecule。这些函数可以方便地生成晶体结构、分子结构和超胞结构。
下面是一个使用ASE的make_supercell函数生成超胞的示例代码:
```python
from ase.io import read
from ase.build import make_supercell
# 加载POSCAR文件
structure = read('POSCAR')
# 生成2x2x2的超胞
supercell = make_supercell(structure, [2, 2, 2])
# 输出超胞的原子数和晶格参数
print('Number of Atoms in Supercell: ', len(supercell))
print('Lattice Parameters of Supercell: ', supercell.get_cell_lengths_and_angles())
```
该代码使用ASE的make_supercell函数生成2x2x2的超胞,并输出超胞的原子数和晶格参数。根据超胞的大小和晶格参数,您可以确定原子的分布情况。如果超胞较小且晶格参数不变,则原子的分布比较均匀。如果超胞较大或晶格参数发生变化,则原子的分布可能会受到影响。
上述代码的错误:Traceback (most recent call last): File "10.py", line 12, in <module> atoms = atoms.new_array('positions', [atom.position for atom in c_atoms]) # 更新Atoms对象的位置信息 File "/export/home/anliying/.local/lib/python3.8/site-packages/ase-3.22.1-py3.8.egg/ase/atoms.py", line 460, in new_array if not a.flags['C_CONTIGUOUS']: AttributeError: 'list' object has no attribute 'flags'
这个错误是由于 `new_array` 方法期望的第二个参数是一个 NumPy 数组,而您传递了一个列表。您可以使用 NumPy 库中的 `array` 函数将列表转换为 NumPy 数组,或者使用 `ase.Atoms` 对象中的 `set_positions` 方法来更新原子位置。以下是使用 `set_positions` 方法的示例代码:
```python
from ase.io import read, write
from ase.io.cif import write_cif
import os
# 读取每个POSCAR文件,筛选出C原子并创建CIF文件
for filename in os.listdir('.'):
if filename.startswith('POSCAR'):
atoms = read(filename)
c_atoms = [atom for atom in atoms if atom.symbol == 'C'] # 使用列表推导式筛选C原子
fe_atoms = [atom for atom in atoms if atom.symbol == 'Fe'] # 使用列表推导式筛选Fe原子
atoms.set_positions([atom.position for atom in c_atoms]) # 使用set_positions方法更新原子位置
write_cif('{}.cif'.format(filename.split('.')[0]), atoms=atoms, atoms_per_site=len(c_atoms))
```
在这个修改后的代码中,我们使用 `set_positions` 方法更新了原子位置,而不是使用 `new_array` 方法。`set_positions` 方法期望的参数是一个 NumPy 数组,因此我们使用了列表推导式来创建一个 NumPy 数组,其中包含了 C 原子的位置信息。最后,我们使用更新后的 `Atoms` 对象来创建 CIF 文件。
阅读全文