dispersiveXanes/figures/figures_v1/fig5_focusing/fig_focusing.py

137 lines
4.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import sys
sys.path.insert(0,"../../../")
import collections
import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
import dispersiveXanes_utils as utils
import xppl37_spectra
import xanes_analyzeRun
import mcutils as mc
import trx
import datastorage as ds
nice_colors = ["#1b9e77", "#d95f02", "#7570b3"]
nice_colors = "#1f78b4 #a6cee3 #b2df8a #33a02c".split()
gradual_colors = ['#014636', '#016c59', '#02818a', '#3690c0', '#67a9cf', '#a6bddb', '#d0d1e6']#, '#ece2f0']
def get_data(run=127,threshold=0.05,force=False):
fname = "../data/fig_focusing_run%04d.h5" % run
if not os.path.isfile(fname) or force:
# this functions splits the run based on FOM
data=xppl37_spectra.calcSpectraForRun(run)
E = data.run.E
ref = ds.DataStorage(E=E, p1=data.p1[0],p2=data.p2[0] )
sample = ds.DataStorage(E=E, p1=data.p1[1],p2=data.p2[1] )
_,_,Abs = xppl37_spectra.calcAbs(ref,ref,threshold=threshold)
ref.Abs = Abs
_,_,Abs = xppl37_spectra.calcAbs(ref,sample,threshold=threshold)
sample.Abs = Abs
temp = ds.DataStorage( ref=ref,sample=sample)
temp.info="Abs calculated with threshold = %.3f" % threshold
temp.save(fname)
data = ds.read(fname)
ref = data.ref
sample = data.sample
_,_,Abs = xppl37_spectra.calcAbs(ref,ref,threshold=threshold)
ref.Abs = Abs
_,_,Abs = xppl37_spectra.calcAbs(ref,sample,threshold=threshold)
sample.Abs = Abs
data = ds.DataStorage( ref=ref,sample=sample)
data["threshold"]=threshold
return data
def get_ref():
E,data=np.loadtxt("../data/Fe_ref.txt",unpack=True)
return ds.DataStorage(E=E*1e3,data=data/2.05+0.07)
def get_1b():
E,data=np.loadtxt("../data/Fe_1bunch.txt",unpack=True)
return ds.DataStorage(E=E*1e3,data=data/2.05+0.07)
def fig_focusing(run=127,force=False,threshold=0.05,smoothWidth=0.3,i0_monitor=0.1):
ref = get_ref()
color_ss = '#08519c'
color_av = '#238b45'
color_av_all = '#d95f0e'
shifty = 1
data = get_data(run,force=force,threshold=threshold)
E = data.ref.E
shots = range(30,35)
figure = plt.figure(figsize = [7,5])
gs = gridspec.GridSpec(1, 2, width_ratios=[1, 1],)
ax = []
ax.append( plt.subplot(gs[0]) )
ax.append( plt.subplot(gs[1],sharex=ax[0],sharey=ax[0]) )
# ax.append( plt.subplot(gs[2],sharex=ax[0]) )
if i0_monitor is not None:
i0_ref = np.nanmean(data.ref.p1,axis=1)
idx = i0_ref>np.percentile(i0_ref,i0_monitor)
data.ref.Abs = data.ref.Abs[idx]
i0_ref = np.nanmean(data.sample.p1,axis=1)
idx = i0_ref>np.percentile(i0_ref,i0_monitor)
data.sample.Abs = data.sample.Abs[idx]
ref = data.ref.Abs[shots]
sam = data.sample.Abs[shots]
if smoothWidth > 0:
ref = xppl37_spectra.smoothSpectra(E,ref,res=smoothWidth)
sam = xppl37_spectra.smoothSpectra(E,sam,res=smoothWidth)
idx = E>7150
sam[:,idx]=np.nan
ref[:,idx]=np.nan
av_ref = np.nanmedian(ref,0)
av_sam = np.nanmedian(sam,0)
for ishot,shot in enumerate(shots):
ax[0].axhline(ishot*shifty,ls='--',color="0.9")
ax[1].axhline(ishot*shifty,ls='--',color="0.9")
ax[0].plot(E,av_ref+ishot*shifty,color=color_av_all,lw=1,zorder=10)
ax[1].plot(E,av_sam+ishot*shifty,color=color_av_all,lw=1,zorder=10)
ax[0].plot(E,ref[ishot]+ishot*shifty,ls = '-' ,color=color_ss,lw=2)
ax[0].text(7125,ishot+0.2,"σ = %.2f"%np.nanstd(ref[ishot]))
ax[1].plot(E,sam[ishot]+ishot*shifty,ls = '-' ,color=color_ss,lw=2)
#to_save.append(s1_norm)
#to_save.append(s2_norm)
#to_save.append(a)
ax[0].set_title("Run %s"%str(run))
ax[0].set_ylabel("No sample Absorption")
ax[1].set_ylabel("Sample Absorption")
ax[0].set_xlabel("Energy (keV)")
ax[1].set_xlabel("Energy (keV)")
ax[0].grid(axis='x',color="0.7",lw=0.5)
ax[1].grid(axis='x',color="0.7",lw=0.5)
ax[0].set_xlim(7080,7150)
ax[0].set_yticks( () )
ax[1].set_yticks( () )
ax[0].set_ylim(-0.3,len(ref)+0.2)
plt.tight_layout()
plt.savefig("fig_focusing.png",transparent=True,dpi=300)
plt.savefig("fig_focusing.pdf",transparent=True)
to_save = np.vstack( (E,np.nanmedian(ref,0),ref) )
info = "# threshold=%.2f; smoothWidth=%.2f eV" %(threshold,smoothWidth)
info += "\n#E abs_average_over_shots shots ..."
trx.utils.saveTxt("../data/fig_focusing_run%04d_ref.txt"%run,E,to_save,info=info)
to_save = np.vstack( (E,np.nanmedian(sam,0),sam) )
info = "# threshold=%.2f; smoothWidth=%.2f eV" %(threshold,smoothWidth)
info += "\n#E abs_average_over_shots shots ..."
trx.utils.saveTxt("../data/fig_focusing_run%04d_sam.txt"%run,E,to_save,info=info)
#if __name__ == "__main__": fig_fe_xas()