def replace(path, site, rep): """ * 元素ラベルを交換する\n * e.g.: cvm_input.py ファイル名 --site "0011" --rep "AC BD"\n * --site は左から順に第一、第二、第三...サイトに対応\n 0 で交換判定しない、 1 で交換判定するサイトを指定\n * "0011" では 4 副格子中の 3 番目と 4 番目の site 原子ラベルを交換する設定\n * --rep で交換するラベルの組み合わせを指定する\n * "AC BD" は A を C に B を D に置き換える * ラベルを変えない場合は "AA" のように同じラベルを振る """ d = len(site) site_ids = [j + k*d for k in range(100) for j in [int(i) for i in range(len(site)) if site[i] == "1"]] print(site_ids) replace_dict = {x[0]:x[1] for x in rep.split()} strs = CVMStrs.from_str_file(path) strs.replace_site_elements(site_ids, replace_dict) fname = path + "_rev" for s in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": if s in rep: largest = s strs.complete_elements("ABCDEFGHIJKLMNOPQRSTUVWXYZ".index(largest)+1) strs.make_file(fname) try: enes = CVMEnergies.from_energies_file("energies.txt") enes.rename_from_str_labels(strs) enes.make_file("energies.txt_rev") except IOError: pass
def rename_energies_from_cwm(): """ energies.txt を cwm.txt ファイルから修正する """ path = "cwm.txt" cwms = CVMCwms.from_cwm_file(path) enes = CVMEnergies.from_energies_file("energies.txt") enes.rename_from_cwm_labels(cwms) enes.make_file("energies.txt_rev")
def rename_energies(path): """ energies.txt を str ファイルから修正する """ path = "hcp.str" strs = CVMStrs.from_str_file(path) enes = CVMEnergies.from_energies_file("energies.txt") enes.rename_from_str_labels(strs) enes.make_file("energies.txt_rev")
def exchange_elements(path, elem1, elem2): """ 原子ラベルを交換したファイルを作成 """ strs = CVMStrs.from_str_file(path) enes = CVMEnergies.from_energies_file("energies.txt") strs.exchange_elements(elem1, elem2) enes.exchange_elements(elem1, elem2) fname = path + "_rev" strs.make_file(fname) enes.make_file("energies.txt_rev")
def remove_site(args): """ 指定したラベルの原子を削除する 削除する原子数は ratio (原子数/トータルのサイト数) として指定する 使用例 'remove_site "B 6/10"' エネルギーを単位サイトあたりに補正する """ elems = args.split()[0] ratio = Fraction(args.split()[1]) enes = CVMEnergies.from_energies_file('energies.txt') enes.remove_element(elems, ratio) enes.make_file('energies.txt_rev')