I am performing data analysis on EDXS data. For the analysis I need some parameters such as sample thickness, elements in the sample, etc .. Depending on the microscope that was used (and the corresponding acquisition software) these parameters are not all filled in the metadata.
Is there a way to set the metadata parameters so that the previous values are not overwritten and only the empty ones are filled ?
I know it is possible to do that for elements using s.add_elements(["Si"])
, but I couldn't find the same function for microscope parameters for example.
Hi everyone, I am trying use SamFire for EELS model fitting, After reading the documentation and the source code a bit, I still have few question about how to set up properly. I currently have the setup as:
# to fit 5% of the pixels to estimate the starting values
shape = (s_eels.axes_manager.navigation_axes[1].size, s_eels.axes_manager.navigation_axes[0].size)
mask = np.random.choice([0, 1], size=shape, p=[0.05, 0.95])
m.multifit(mask=mask, optimizer='lm', bounded=True,iterpath='serpentine',kind='smart')
# then start samfire
samf = m.create_samfire(workers=2, ipyparallel=False) *#create samfire*
samf.metadata.goodness_test.tolerance = 0.3 *#set a sensible tolerance*
samf.refresh_database() # here is to refresh the stragtegy or the pixel fitted? it reads bit contradictory from the documentation and the source code
samf.start(optimizer='lm', loss_function='ls', bounded=True,iterpath='serpentine',kind='smart', optional_components=['Mn_L3','O_K','PowerLaw']) *#start fitting*
The fitting results have following issues:
Only the already m.multfit()
fitted pixels have sensible values, the others does not have a good fit. I also tried fitting some pixels with smart_fit()
which gives similar results. This can be verified with m.red_chisq.plot()
(see attached).
The vacuum pixels yiled growth for the powerlaw fitting of the pre-edge range, due to the noise, and the edge components fail as well as there should be none. Thus, I have all the components as optional but this is not the solution. Is it possible to switch off the fitting for the vacuum, I guess one can use mask.
One quesiton about the elemental component intensity for mapping, I saw discussion in #2562, is it possible to have the absolute intensity or show the H-S cross-section under the given microscope condition? As I want to know their exact product to calculate the partial cross-section…
One final question about the fine structure coefficient when m.enable_fine_structure()
, are those a combination of gaussians? Can we acess the gaussian height, width and centre? I currently counldn’t find docs about the values in the fine_structure_coefficient, but see sometimes their values are negative and the plot indeed shows negetive gaussian correspondingly to fit the curve (which occurs even after forcing all edge component to be possitive), does the negative values make sense? If it is gaussian combination, it will be really helpful to have the acess to their values (instead of making gaussian models oneself), which can be used for computing white line for example.
I am happy to give a minimum example if that could be helpful. Many thanks for your helps!
import hyperspy.api as hs
from hyperspy.axes import UniformDataAxis
import dask.array as da
from hyperspy.datasets.example_signals import EDS_SEM_Spectrum
from hyperspy._signals.eds_sem import LazyEDSSEMSpectrum
from hyperspy._signals.signal2d import LazySignal2D
s = EDS_SEM_Spectrum()
data = s.data
axis = UniformDataAxis(offset = -0.1, scale = 0.01, size = 1024, units="eV")
s2 = LazyEDSSEMSpectrum(data, axes = [axis])
s2.add_elements(s.metadata.Sample.elements)
s2.set_microscope_parameters(beam_energy=10.)
nav = LazySignal2D(da.random.random((2500, 1000)))
s = s2 * nav.T
print("Shape:", s.data.shape) # 2500, 1000, 1024 - ~20GB
s.save("lazy.hspy", compression=None, overwrite=True, chunks = (100, 1000, 1024))
conda create --name testdask hyperspy
results in an error? I'm running mamba on my M1 Mac, and installing hyperspy is giving a really weird error today. Installing jupyter notebook works fine:
(base) ➜ ~ conda create --name testdask hyperspy
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: |
Found conflicts! Looking for incompatible packages.
This can take several minutes. Press CTRL-C to abort.
failed
UnsatisfiableError:
(No info after the UnsatisfiableError)
decomposition
function and use our estimator with the algorithm =
key word argument .fit
method takes some arguments and they are not included in the parameters of the estimator object itself because it depends on the fitted data. (For example, but not limited to that, for graph regularization a 2D shape input is needed.)decomposition
takes **kwargs they would be passed to the fit
function of the algorithm object but it seems to me that I was wrong.si.decomposition(alogrithm='ORPCA')
to return the variance? I ran standard SVD the ORPC and am receiving the following:---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-99-659ba5d350c0> in <module>
----> 1 si.plot_explained_variance_ratio(threshold=4, xaxis_type='number')
c:\users\owner\documents\github\hyperspy\hyperspy\learn\mva.py in plot_explained_variance_ratio(self, n, log, threshold, hline, vline, xaxis_type, xaxis_labeling, signal_fmt, noise_fmt, fig, ax, **kwargs)
1427
1428 """
-> 1429 s = self.get_explained_variance_ratio()
1430
1431 n_max = len(self.learning_results.explained_variance_ratio)
c:\users\owner\documents\github\hyperspy\hyperspy\learn\mva.py in get_explained_variance_ratio(self)
1311 target = self.learning_results
1312 if target.explained_variance_ratio is None:
-> 1313 raise AttributeError(
1314 "The explained_variance_ratio attribute is "
1315 "`None`, did you forget to perform a PCA "
AttributeError: The explained_variance_ratio attribute is `None`, did you forget to perform a PCA decomposition?
import hyperspy.api as hs
import h5py
import dask
import dask.array as da
f = h5py.File('data_path.hdf5', 'r')
edx_da = da.from_array(f['data_edx'], chunks=[1,128,128,4096])
f.close()
edx_hs = hs.signals.EDSTEMSpectrum(edx_da).as_lazy()
# <LazyEDSTEMSpectrum, title: , dimensions: (512, 512, 98|4096)>
test = edx_hs.inav[:,:,0]
test.compute()
ValueError: Not a dataset (not a dataset)