139 lines
3.8 KiB
Python
139 lines
3.8 KiB
Python
import sys
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
import glob
|
|
import scipy.interpolate as ip
|
|
plt.style.use(["style", "colors", "one_column"])
|
|
from spin_image import SpinImage, FFT
|
|
from ditact_pic import plot
|
|
|
|
def check_percentage(p1, p2):
|
|
plt.figure()
|
|
plt.plot(p1, p2)
|
|
|
|
|
|
def merge(files):
|
|
merge = []
|
|
plt.figure()
|
|
for file in files:
|
|
print(file)
|
|
data = np.load(file, allow_pickle=True)
|
|
old_percentage = data["percentage"]
|
|
w_percentage = data["w_percentage"]
|
|
# check_percentage(old_percentage, w_percentage)
|
|
percentage = old_percentage
|
|
out = []
|
|
for o in ["out_1", "out_2", "out_3", "out_4"]:
|
|
out.append(np.array(data[o]))
|
|
print(out)
|
|
out = np.array(out)[:, :, 0]
|
|
|
|
summe = np.max(np.sum(out, axis=0))
|
|
out = out / summe
|
|
merge.append(out)
|
|
|
|
plt.plot(out[0, :], "r")
|
|
plt.plot(out[3, :], "b")
|
|
plt.plot(out[2, :], "g")
|
|
|
|
all = sum(merge)
|
|
summe = np.max(np.sum(all, axis=0))
|
|
all = all / summe
|
|
|
|
plt.plot(all[0, :], "k")
|
|
plt.plot(all[3, :], "k")
|
|
plt.plot(all[2, :], "k")
|
|
percentage = 1-percentage
|
|
return percentage, all
|
|
|
|
|
|
def debug(percentage, out):
|
|
plt.figure()
|
|
for o in out:
|
|
plt.plot(percentage, o)
|
|
|
|
plt.plot(percentage, out[0, :], "k")
|
|
plt.plot(percentage, out[3, :], "k")
|
|
plt.plot(percentage, out[2, :], "k")
|
|
|
|
|
|
def stacked_plot(ax, percentage, out, title=""):
|
|
stacks = ax.stackplot(percentage, out[[0, 3, 1, 2]], colors=[
|
|
"w"], ls="solid", ec="k")
|
|
hatches = ["/", "", "\\", "\\"]
|
|
for stack, hatch in zip(stacks, hatches):
|
|
stack.set_hatch(hatch)
|
|
ax.set_xlabel("Metallic Phase (%)")
|
|
ax.set_ylabel("normalized Intensity ")
|
|
ax.set_ylim([0.4, 1])
|
|
ax.set_xlim([0., 1])
|
|
ax.text(0.1, 0.9, "monoclinic", backgroundcolor="w")
|
|
ax.text(0.6, 0.5, "rutile", backgroundcolor="w")
|
|
ax.text(0.35, 0.75, "diffusive", backgroundcolor="w")
|
|
|
|
|
|
def time_scale(ax, p, o):
|
|
rut_perc = o[0]
|
|
rut_perc = rut_perc - np.min(rut_perc)
|
|
rut_perc /= np.max(rut_perc)
|
|
|
|
mono_perc = -o[2]
|
|
mono_perc = mono_perc - np.min(mono_perc)
|
|
mono_perc /= np.max(mono_perc)
|
|
|
|
# cs_rut = ip.CubicSpline(p[::-1], rut_perc[::-1])
|
|
# cs_mono = ip.CubicSpline(p[::-1], mono_perc[::-1])
|
|
cs_rut = ip.interp1d(p[::-1], rut_perc[::-1])
|
|
cs_mono = ip.interp1d(p[::-1], mono_perc[::-1])
|
|
|
|
#plt.figure()
|
|
#ph = np.linspace(0.01, 0.99, 100)
|
|
#plt.plot(ph, cs_rut(ph))
|
|
#plt.plot(ph, cs_mono(ph))
|
|
|
|
time = np.linspace(0.01, 3, 1000)
|
|
phy_phase = np.exp(-time)
|
|
rut_phase = cs_rut(phy_phase)
|
|
mono_phase = cs_mono(phy_phase)
|
|
|
|
ax.plot(time, phy_phase, "k:", label="physical")
|
|
ax.plot(time, rut_phase, label="rutile")
|
|
ax.plot(time, mono_phase, label="monoclinic")
|
|
ax.set_xlabel("time (a.u.)")
|
|
ax.set_ylabel("Metallic Phase (%)")
|
|
ax.legend()
|
|
|
|
|
|
def read_file(file):
|
|
files = np.load("./merged.npz")
|
|
p = files["p"]
|
|
o = files["o"]
|
|
return p, o
|
|
|
|
def intens(ax, file, p, o):
|
|
intens = FFT()
|
|
intens.load(file)
|
|
plot(intens, ax)
|
|
ax.set_xlim([-.8,0.8])
|
|
ax.set_ylim([-.8,1.6])
|
|
axins = ax.inset_axes([0.0, 0.5, 0.47, 0.5])
|
|
axins.plot(p, o[0], label="rut")
|
|
axins.plot(p, o[3], label="diff")
|
|
axins.plot(p, o[2], label="mono")
|
|
axins.legend(loc='lower left', bbox_to_anchor=(1, 0.5))
|
|
#axins.get_yaxis().set_visible(False)
|
|
axins.yaxis.tick_right()
|
|
axins.set_yticks([0,0.5]
|
|
if __name__ == "__main__":
|
|
p, o = merge(sys.argv[2:])
|
|
np.savez("merged.npz", p=p, o=o)
|
|
# eval_data_print(f)
|
|
|
|
fig, axs = plt.subplots(1,3)
|
|
fig.set_figheight(3)
|
|
stacked_plot(axs[1],p, o)
|
|
time_scale(axs[2],p, o)
|
|
intens(axs[0], sys.argv[1], p ,o)
|
|
plt.tight_layout()
|
|
plt.show()
|