pyspglib_v1.0.1(2).zip

  • 3musen
    了解作者
  • Python
    开发工具
  • 38KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2020-01-16 09:58
    上传日期
晶体空间群查找,cif2poscar转换
pyspglib_v1.0.1(2).zip
  • pyspglib_v1.0.1(2).py
    387.4KB
内容介绍
#!/usr/bin/env python # -*- coding: utf-8 -*- import math as m import numpy as np import re from fractions import Fraction as frac try: import spglib as spg except ImportError: from pyspglib import spglib as spg def readfile(filename): ''' read file to a list; and del the blank lines''' try: f = open(filename) except: print('Error: cannot open file:'+ filename) exit(0) rst = [] try: for line in f: if len(line.strip()) != 0: rst.append(line.strip()) finally: f.close() return rst def appro_float(flo): for i in range(len(flo)): if flo[i]=="(": flo=flo[:i] break return float(flo) def symmetry(cif): symm = [];__HALL='';__H_M='' symmetry = [] trans = [] iline = 0 find_symm_info=False for line in cif: iline += 1 if '_symmetry_equiv_pos_as_xyz' in line or '_space_group_symop_operation_xyz' in line: for item in cif[iline:]: if item.strip()[0] != '_' and item.strip() != 'loop_': if '\'' in item: pattern=r'\'(.*?)\'' #print(item) itemlist=re.findall(pattern,item) item=itemlist[0] if item[0] == "'" or item[0] == '"': iitem = item[1:-1] else: iitem = item[:] symm.append(iitem.strip().split(',')) find_symm_info=True else: break break elif 'name_Hall' in line: try: pattern=r'\'(.*?)\'' _HALL=re.findall(pattern,line) __HALL=_HALL[0] except: try: pattern=r'\"(.*?)\"' _HALL=re.findall(pattern,line) __HALL=_HALL[0] except: __HALL=' '.join(line.split()[1:]) #print __HALL elif 'name_H-M' in line: try: pattern=r'\'(.*?)\'' _H_M=re.findall(pattern,line) __H_M=_H_M[0] except: try: pattern=r'\"(.*?)\"' _H_M=re.findall(pattern,line) __H_M=_H_M[0] except: __H_M=' '.join(line.split()[1:]) #print __H_M # print(find_symm_info) #print(__HALL) print(symm) print(__HALL) print(__H_M) if (find_symm_info==False): if (__H_M=='' and __HALL==''): print("P1 symmetry is assumed!") symm=[['x',' y',' z']] elif (__HALL!=''): #print (SymOpsHall['I -4 2 3']) __HALL=' '.join(__HALL.split()) #print(__HALL) try: symm=SymOpsHall[__HALL] except: raise OSError("WRONG HALL SYMBOL") elif (__H_M!=''): __H_M=''.join(__H_M.split()) try: symm=HM2Hall[__H_M] except: raise OSError("WRONG H-M SYMBOL") #print(symm,'symm') for item in symm: s2 = [] tran1 = [] for subtem in item: subtem = subtem.strip() try: isprit = subtem.index('/') stt = [istr for istr in subtem] for i in range(0, 3): del(stt[isprit - 1]) if stt[-1] == '+' or stt[-1] == '-': del(stt[-1]) subt = ''.join(stt) except: subt = subtem[:] s1 = [0, 0, 0] if subt[0] == '-' or subt[0] == '+': for i in range(0, len(subt) - 1, 2): if subt[i:i+2] == '-x': s1[0] = -1 if subt[i:i+2] == '+x': s1[0] = 1 if subt[i:i+2] == '-y': s1[1] = -1 if subt[i:i+2] == '+y': s1[1] = 1 if subt[i:i+2] == '-z': s1[2] = -1 if subt[i:i+2] == '+z': s1[2] = 1 else: if subt[0] == 'x': s1[0] = 1 if subt[0] == 'y': s1[1] = 1 if subt[0] == 'z': s1[2] = 1 for i in range(1, len(subt) - 1, 2): if subt[i:i+2] == '-x': s1[0] = -1 if subt[i:i+1] == '+x': s1[0] = 1 if subt[i:i+2] == '-y': s1[1] = -1 if subt[i:i+2] == '+y': s1[1] = 1 if subt[i:i+2] == '-z': s1[2] = -1 if subt[i:i+2] == '+z': s1[2] = 1 t1 = 0. for subsub in re.split('[+,-]', subtem): try: t1 = float(frac(subsub)) except: continue tran1.append(t1) s2.append(s1) symmetry.append(s2) trans.append(tran1) return (np.array(symmetry), np.array(trans)) def atominfo(cif): loopinfo = [] atominfo = [] for i in range(0, len(cif)): if cif[i].strip() == 'loop_': istart = i loopinfo = [] atominfo = [] for j in range(istart + 1, len(cif)): if cif[j].strip() == 'loop_' or cif[j].strip().startswith("#"): break if cif[j].strip()[0] == '_': loopinfo.append(cif[j].strip()) else: atominfo.append(cif[j].strip()) # debug # print 'ttt' # print loopinfo # end debug if '_atom_site_fract_x' in loopinfo: break try: il = loopinfo.index('_atom_site_label') ix = loopinfo.index('_atom_site_fract_x') iy = loopinfo.index('_atom_site_fract_y') iz = loopinfo.index('_atom_site_fract_z') except: print('Unsupport CIF format!') exit(0) typesym = True try: it = loopinfo.index('_atom_site_type_symbol') except: typesym = False fractional_occupation=False try: fractional_occupation=True f_o = loopinfo.index('_atom_site_occupancy') except: fractional_occupation = False atomtmp = [a.split() for a in atominfo] label = [] ato = [] symbol = [] for item in atomtmp: label.append(item[il]) ato.append([appro_float(ii) for ii in [item[ix],item[iy],item[iz]]]) for item in atomtmp: #print(item[il]) recognized=False;two_width=False for jk in element: if item[il][:2].upper() == jk: symbol.append(item[il][:2]);recognized=True;two_width=True;break if (not two_width): for jk in element: if item[il][0].upper() == jk: symbol.append(item[il][0]);recognized=True;break if (not recognized): raise OSError("Unidentified atom type!") #symbol.append(item[it]) if (fractional_occupation): for item in atomtmp: if appro_float(item[f_o])!=1.0: raise OSError("Not suport for fractional occupation!") equAtom = {} for i in range(0, len(label)): equAtom[label[i]] = [symbol[i], ato[i]] #print(equAtom) return equAtom,label def lattice(cif): for item in cif: if "_cell_length_a" in item: a = appro_float(item.split()[1]) if "_cell_length_b" in item: b = appro_float(item.split()[1]) if "_cell_length_c" in item: c = appro_float(item.split()[1]) if "_cell_angle_alpha" in item: alpha = appro_float(item.split()[1])/180*m.pi if "_cell_angle_beta" in item: beta = appro_float(item.split()[1])/180*m.pi if "_cell_angle_gamma" in item: gamma = appro_float(item.split()[1])/180*m.pi bc2 = b**2 + c**2 - 2*b*c*m.cos(a
评论
    相关推荐
    • 量子化学(徐光宪,上中下三册).rar
      量子化学(徐光宪著,上中下三册,3合1)
    • HTML化学元素周期表
      HTML化学元素周期表,JS化学元素周期表,点击某个化学元素符号,显示名称、序号、重量、排列、轨道、融点、沸点等化学性质。 化学元素周期表是1869年俄国科学家门捷列夫(Dmitri Mendeleev)首创的,他将当时已知的63...
    • 化学品:化学品:化学工程设计图书馆(ChEDL)的化学数据库
      化学制品 内容 化学品库中包含纯组分化学品数据的广泛汇编,可为工程师,科学家,技术人员以及任何使用化学品的人员提供服务。 化学品库可促进以下方面的检索和计算: 化学常数,包括分子式,分子量,标准沸点和...
    • OpenChem:开放化学
      开放化学 OpenChem是用于具有后端的计算化学的深度学习工具包。 OpenChem的目标是使深度学习模型成为计算化学和药物设计研究人员易于使用的工具。 主要特点 采用统一API的模块化设计,模块可以轻松地相互组合。 ...
    • 深度化学回归
      深度化学回归
    • python脚本生物化学
      生物化学家的Python数据和脚本 该研讨会使用与生物化学有关的示例介绍python编程语言 用法 建立书 如果您想开发和构建《面向生物化学家的Python数据和脚本》一书,则应该: 克隆此存储库并运行 运行pip install -r ...
    • 化学清洁前端
      该项目是通过。 可用脚本 在项目目录中,可以运行: yarn start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果进行编辑,页面将重新加载。 您还将在控制台中看到任何棉绒错误。... 在交互式监视模式下启动...
    • AIChem:智能化学在线课程
      化学 智能化学在线课程,张强,西北农林科技大学化学与药学院 1教学目的 面向化学专业的本科生,系统学习化学数据的人工智能分析与挖掘 2内容 课程框架(学时数) 背景(2) 如何优雅的写代码,并增加鲁棒性(类的...
    • 2011 化学发光免疫分析技术及其进展.zip
      化学发光技术进展说明,医疗仪器学习可参考
    • 《微波化学》.zip
      可以了解微波化学的相关知识,为科研工作者和车学者日共帮助