diff --git a/XAS.py b/XAS.py index 2ff3c914555f848828a7075431e5ee6c8857af03..dc4d36c327ec4d44c67ee344830f2a8fdf5672be 100644 --- a/XAS.py +++ b/XAS.py @@ -113,12 +113,12 @@ def binning(x, data, func, bins=100, bin_length=None): dummy = func([]) res = np.empty((nb_bins), dtype=dummy.dtype) for k in range(nb_bins): - res[k] = func(data[bin_idx == k]) + res[k] = func(data[k+1==bin_idx]) return bins, res -def xas(nrun, bins=None, Iokey='SCS_SA3', Itkey='MCP3apd', nrjkey='nrj', Iooffset=0, plot=False, - fluorescence = False): +def xas(nrun, bins=None, Iokey='SCS_SA3', Itkey='MCP3apd', nrjkey='nrj', + Iooffset=0, plot=False, fluorescence=False): """ Compute the XAS spectra from a xarray nrun. Inputs: @@ -130,12 +130,12 @@ def xas(nrun, bins=None, Iokey='SCS_SA3', Itkey='MCP3apd', nrjkey='nrj', Iooffse NRJkey: string for the nrj fields, typically 'nrj' Iooffset: offset to apply on Io plot: boolean, displays a XAS spectrum if True - fluorescnce: boolean, if True, absorption is the ratio, + fluorescence: boolean, if True, absorption is the ratio, if False, absorption is negative log Outputs: a dictionnary containing: - nrj: the bins center + nrj: the mean of photon energy in each bin muA: the absorption sigmaA: standard deviation on the absorption sterrA: standard error on the absorption @@ -189,12 +189,13 @@ def xas(nrun, bins=None, Iokey='SCS_SA3', Itkey='MCP3apd', nrjkey='nrj', Iooffse sterrA = nosample['sigmaA']/np.sqrt(nosample['counts']) bins_c = 0.5*(bins[1:] + bins[:-1]) - + bin_idx = np.digitize(rundata['nrj'], bins) + nrj = np.array([ np.mean(rundata['nrj'][idx+1==bin_idx]) for idx in range(len(bins)-1)]) if plot: f = plt.figure(figsize=(6.5,6)) gs = gridspec.GridSpec(2,1,height_ratios=[4,1]) ax1 = plt.subplot(gs[0]) - ax1.plot(bins_c, muA, color='C1', label=r'$\sigma$') + ax1.plot(nrj, muA, color='C1', label=r'$\sigma$') if fluorescence: ax1.set_ylabel('XAS (fluorescence)') else: @@ -202,7 +203,7 @@ def xas(nrun, bins=None, Iokey='SCS_SA3', Itkey='MCP3apd', nrjkey='nrj', Iooffse ax1.set_xlabel('Energy (eV)') ax1.legend() ax1_twin = ax1.twinx() - ax1_twin.bar(bins_c, nosample['muIo'], width=0.80*(bins_c[1]-bins_c[0]), + ax1_twin.bar(nrj, nosample['muIo'], width=0.80*(bins_c[1]-bins_c[0]), color='C1', alpha=0.2) ax1_twin.set_ylabel('Io') try: @@ -213,13 +214,13 @@ def xas(nrun, bins=None, Iokey='SCS_SA3', Itkey='MCP3apd', nrjkey='nrj', Iooffse f.suptitle(nrun.attrs['plot_title']) ax2 = plt.subplot(gs[1]) - ax2.bar(bins_c, nosample['counts'], width=0.80*(bins_c[1]-bins_c[0]), + ax2.bar(nrj, nosample['counts'], width=0.80*(bins_c[1]-bins_c[0]), color='C0', alpha=0.2) ax2.set_xlabel('Energy (eV)') ax2.set_ylabel('counts') plt.tight_layout() - return {'nrj':bins_c, 'muA':muA, 'sterrA':sterrA, 'sigmaA':nosample['sigmaA'], + return {'nrj':nrj, 'muA':muA, 'sterrA':sterrA, 'sigmaA':nosample['sigmaA'], 'muIo':nosample['muIo'], 'counts':nosample['counts']} def xasxmcd(dataP, dataN):