grrmpy.path.create_reactpath のソースコード

from configparser import ConfigParser, ExtendedInterpolation, BasicInterpolation
import json
import re
from pathlib import Path
from ase.io import read
from grrmpy.path.reaction_path import ReactPath,ReactPaths

[ドキュメント]def create_reactpath(file): if not Path(file).exists(): raise FileNotFoundError(f"{file}が存在しません") # parserの設定 config = ConfigParser(interpolation= ExtendedInterpolation()) config.optionxform = str # キーが小文字になることを防ぐ config.read(file, encoding='utf-8') # セクション title_list = config.sections() if "Dir" in config.sections(): title_list.remove("Dir") # ["ReactPath1","ReactPath2"] replace_dict = dict(config.items('Dir')) #{'EQ': './EQ_List/', 'TS': './TS_List/'} path_txt_list = [config[title]["path"] for title in title_list] solid_dot_list = [[i.strip() for i in re.split("(;)|(~)|(\|)", path_txt) if not i is None] for path_txt in path_txt_list] solid_list = [[j for i,j in enumerate(solid_dot) if i%2==0] for solid_dot in solid_dot_list] dot_list = [[j for i,j in enumerate(solid_dot) if i%2==1 ] for solid_dot in solid_dot_list] name_list = [] solid_path_list = [] for title,solid in zip(title_list,solid_list): solid_path = [] if "name" in config[title].keys(): solid_path =[species+".traj" for species in solid] name_list.append(json.loads(config.get(title,"name"))) elif "Dir" in config.sections(): for species in solid: for p,path in replace_dict.items(): if p in species: solid_path.append(species.replace(p,replace_dict[p])+".traj") name_list.append(solid) else: solid_path =[species+".traj" for species in solid] name_list.append(solid) solid_path_list.append(solid_path) atoms_list = [[read(path) for path in solid_path] for solid_path in solid_path_list] barrier_idx_list = [] mask_list = [] for dot in dot_list: barrier_idx = [] mask = [] for i,sign in enumerate(dot): if "~" in sign: barrier_idx.append(i) if "|" in sign: mask.append(False) else: mask.append(True) barrier_idx_list.append(barrier_idx) mask_list.append(mask) data_list = [{"atoms":atoms,"name":name} for atoms,name in zip(atoms_list,name_list)] react_path_list = [ReactPath(data,mask=mask,barrier_less_index=barrier_idx,title=title) for data,title,mask,barrier_idx in zip(data_list,title_list,mask_list,barrier_idx_list)] if len(react_path_list) == 1: return react_path_list[0] else: return ReactPaths(react_path_list)