def __init__(self, temperatures, energies): if len(temperatures) != len(energies): print("Gibbs: data size are different !") exit() data = [] for temp, ene in zip(temperatures, energies): data.append({'temp': float(temp), 'gibbs': float(ene)}) DataBox.__init__(self, data)
def __init__(self, dos): DataBox.__init__(self, []) self.dos_lines = Cabinet.read_file(dos) self.num_atoms = self.get_num_atoms(self.dos_lines[0]) (self.num_energy, self.fermi_energy) = self.get_parameters(self.dos_lines[5]) print(self.get_parameters(self.dos_lines[5])) self.dos_data = self.__prep_dos_data(self.num_atoms, self.labels_orbital)
def __init__(self, data): """ DataBox の labels label: クラスターのラベル R*N* MxCls: MaxCluster の個数 CV_score: CV score """ DataBox.__init__(self, data) self.output_keys = []
def __init__(self, temps, fit_params): data = [] for temp, param in zip(temps, fit_params): [G, B, B1, V0] = param data.append({'temp': float(temp), 'G_P0': float(G), 'gibbs': float(G), 'B': float(B), 'B1': float(B1), 'V0': float(V0)}) DataBox.__init__(self, data) self.is_per_atom = False self.pressure = 0
def __init__(self, compound, refs): if (compound.murnaghan['temp'] != refs.temp).all(): print('Enthalpy: Temperatures are different !') exit() temp = [{'temp': x} for x in refs.temp] self.compound = compound self.murnaghan = compound.murnaghan self.refs = refs self.comp = compound.comp DataBox.__init__(self, temp) self['enthalpy'] = self.enthalpy()
def __init__(self, path_list, poscar='POSCAR', output='OSZICAR'): """ initialize """ if not path_list: print("path_list is empty !!!") self.filetype = {'poscar': poscar, 'output': output} self.path_list = path_list DataBox.__init__(self, self.get_data()) #self.data, self.comp = self.get_data() #self.trim_bool(self.data, self.data['bool'], 'energy', 'mag') self.output_keys = []
def __init__(self, procar): """ self.dataの構成 'kpoint_id', 'orbitals_phase', 'kpoint', 'energy', 'spin' 'orbitals_tot', 'occupancy' """ flow_procar = open(procar) line = flow_procar.readline() line = flow_procar.readline() (self.num_kpoints, self.num_bands, self.num_atoms) = self.get_meta(line) print(self.get_meta(line)) DataBox.__init__(self, self.get_data(flow_procar))
def table_combi(self, sites, out_key): """ self.dataをcombi用のtableに整形 POSCARでのcombiの元素位置をsiteに指定 __str__()でx:site[0], y:site[1]の元素でtableが出力 """ data_list = self.separate_data('elements', sites[1]) tmp_table = [] tmp_key = [x[sites[0]] for x in self['elements']] keys = sorted(set(tmp_key), key=tmp_key.index) for data in data_list: add_dict = {out_key: data.data[1]['elements'][sites[1]]} add_dict.update({x['elements'][sites[0]]: x[out_key] for x in data.data}) tmp_table.append(add_dict) table = DataBox(tmp_table) table.output_keys = [out_key] + keys return table
def __init__(self, procar, poscar=None): """ self.dataの構成 'kpoint_id', 'orbitals_phase', 'kpoint', 'energy', 'spin' 'orbitals_tot', 'occupancy' 'dk', 'xaxis'を追加 'dk'は前のk点からのk空間上の距離, 'xaxis'はそれを積算したものでband描写の横軸に用いる poscarを読み込ませることで逆格子cellの各軸の長さを反映させて, bandの横軸の長さを対応させることができる defaultではposcarは読まずに、a*, b*, c*の長さは全て1 """ with open(procar, 'r') as flow_procar: line = flow_procar.readline() line = flow_procar.readline() (self.num_kpoints, self.num_bands, self.num_atoms) = self.get_meta(line) print(self.get_meta(line)) DataBox.__init__(self, self.get_data(flow_procar))
def md_voldep(cutoff, wo_fit, vrange): """ md 計算の体積依存性を plot する """ path = "voldep/*/OSZICAR" dir_list = [os.path.dirname(x) for x in glob.glob(path)] average = [] sb_dark = seaborn.dark_palette("skyblue", 10, reverse=True) # sb_dark = seaborn.dark_palette("seagreen", 10, reverse=True) # sb_dark = seaborn.dark_palette("purple", 10, reverse=True) seaborn.set(palette=sb_dark) fig, axes = pylab.subplots(2, 1, figsize=(5, 10)) for dirc in dir_list: with open(os.path.join(dirc, 'OUTCAR')) as wfile: lines = wfile.readlines() meta = re.compile(r".*external pressure = \s*(.*)\s+kB.+") pressure = [] for line in lines: match = meta.match(line) if match: pressure.append(float(match.group(1))) with open(os.path.join(dirc, 'OSZICAR')) as wfile: lines = wfile.readlines() meta = re.compile(r".+T=\s*(.*)\s+E=\s*(.*)\s+F=.+") energy = [] for line in lines: match = meta.match(line) if match: energy.append(float(match.group(2))) data = [{'energy':e, 'pressure':p} for e, p in zip(energy, pressure)] dbox = DataBox(data) volume = float(dirc.split('_')[1]) press_ave = dbox['pressure'][cutoff:].mean() energy_ave = dbox['energy'][cutoff:].mean() average.append({'volume':volume, 'p': press_ave, 'e': energy_ave}) label = "V={0:.0f}".format(float(dirc.split("_")[-1])) seaborn.distplot(dbox['pressure'][cutoff:], label=label, ax=axes[0]) axes[0].legend(loc='upper left') axes[0].set_ylabel("Frequency") axes[0].set_xlabel("Pressuer (kbar)") average_data = DataBox(average) average_data.sorted('volume') if vrange != (0, 0): average_data = average_data.trim_data_within_range('volume', vrange) axes[1].plot(average_data['volume'], average_data['p'], 'p', color=sb_dark[-1]) axes[1].set_ylabel(r"Pressuer (kbar)") axes[1].set_xlabel(r"Volume ($\AA^3$)") fig.subplots_adjust(left=0.20) if not wo_fit: xi, yi = FitData.Stineman_interp_fit(average_data['volume'], average_data['p']) axes[1].plot(xi, yi) idx = np.abs(yi).argmin() print("v0: {0}, p0: {1}".format(xi[idx], yi[idx])) print("v0**(1/3): {0}".format(xi[idx]**(1/3))) axes[1].plot(xi[idx], yi[idx], 'o') pylab.savefig("pressure.eps")
def __init__(self, path_list): self.path_list = path_list DataBox.__init__(self, self.get_data()) self.output_keys = []
def __init__(self, data): DataBox.__init__(self, data)
def __init__(self, data): DataBox.__init__(self, data) self.output_keys = []
def __init__(self, temperatures, bulk_mods): data = [] for temp, bulk in zip(temperatures, bulk_mods): data.append({'temp': float(temp), 'bulk': float(bulk)}) DataBox.__init__(self, data)