Source code for libertem.analysis.sum

import numpy as np
import inspect
from .base import BaseAnalysis, AnalysisResult, AnalysisResultSet
from libertem.analysis.getroi import get_roi
from libertem.udf.sum import SumUDF
from .helper import GeneratorHelper


class SumTemplate(GeneratorHelper):

    short_name = "sum"

    def __init__(self, params):
        self.params = params

    def get_dependency(self):
        return [
            "from matplotlib import colors",
            "from libertem import masks",
            "from libertem.udf.sum import SumUDF"
        ]

    def get_docs(self):
        title = "SUM Analysis"
        docs_rst = inspect.getdoc(SumUDF)
        docs = self.format_docs(title, docs_rst)
        return docs

    def get_analysis(self):
        roi = self.get_roi()
        temp_analysis = [
                f"{roi}",
                "sum_udf = SumUDF()",
                "sum_result = ctx.run_udf(dataset=ds, udf=sum_udf, roi=roi)"
                ]
        return '\n'.join(temp_analysis)

    def get_plot(self):
        plot = [
            "plt.figure()",
            "plt.imshow(sum_result['intensity'], norm=colors.LogNorm())",
            "plt.colorbar()",
         ]
        return ['\n'.join(plot)]


[docs] class SumResultSet(AnalysisResultSet): """ Running a :class:`SumAnalysis` via :meth:`libertem.api.Context.run` returns an instance of this class. If the dataset contains complex numbers, the regular result attribute carries the absolute value of the result and additional attributes with real part, imaginary part, phase and full complex result are available. .. versionadded:: 0.3.0 Attributes ---------- intensity : libertem.analysis.base.AnalysisResult Sum of all detector frames along the navigation dimension, preserving the signal dimension. Absolute value of the sum if the dataset contains complex numbers. Log-scaled visualization. intensity_lin : libertem.analysis.base.AnalysisResult Sum of all detector frames along the navigation dimension, preserving the signal dimension. Absolute value of the sum if the dataset contains complex numbers. Lin-scaled visualization. .. versionadded:: 0.6.0 intensity_real : libertem.analysis.base.AnalysisResult Real part of the sum of all detector frames along the navigation dimension, preserving the signal dimension. This is only available if the dataset contains complex numbers. intensity_imag : libertem.analysis.base.AnalysisResult Imaginary part of the sum of all detector frames along the navigation dimension, preserving the signal dimension. This is only available if the dataset contains complex numbers. intensity_angle : libertem.analysis.base.AnalysisResult Phase angle of the sum of all detector frames along the navigation dimension, preserving the signal dimension. This is only available if the dataset contains complex numbers. intensity_complex : libertem.analysis.base.AnalysisResult Complex result of the sum of all detector frames along the navigation dimension, preserving the signal dimension. This is only available if the dataset contains complex numbers. """ pass
class SumAnalysis(BaseAnalysis, id_="SUM_FRAMES"): TYPE = 'UDF' def get_udf(self): dest_dtype = np.dtype(self.dataset.dtype) if dest_dtype.kind not in ('c', 'f'): dest_dtype = 'float32' return SumUDF(dtype=dest_dtype) def get_roi(self): return get_roi(params=self.parameters, shape=self.dataset.shape.nav) def get_udf_results(self, udf_results, roi, damage): from libertem.viz import visualize_simple if udf_results['intensity'].data.dtype.kind == 'c': return AnalysisResultSet( self.get_complex_results( udf_results['intensity'].data, key_prefix="intensity", title="intensity", desc="sum of all frames", damage=True, default_lin=False, ) ) return SumResultSet([ AnalysisResult( raw_data=udf_results['intensity'].data, visualized=visualize_simple( udf_results['intensity'].data, logarithmic=True, damage=True ), key="intensity", title="intensity [log]", desc="sum of frames log-scaled" ), AnalysisResult(raw_data=udf_results['intensity'].data, visualized=visualize_simple( udf_results['intensity'].data, logarithmic=False, damage=True ), key="intensity_lin", title="intensity [lin]", desc="sum of frames lin-scaled" ), ]) @classmethod def get_template_helper(cls): return SumTemplate