From 230331265bfe5e2684be05242a065febcd97c286 Mon Sep 17 00:00:00 2001 From: Lukas Pielsticker <50139597+lukaspie@users.noreply.github.com> Date: Fri, 4 Oct 2024 15:12:27 +0200 Subject: [PATCH] readd rst files --- dev_tools/docs/nxdl_index.py | 38 +++- .../classes/applications/apm-structure.rst | 138 ++++++++++++++ .../container/ComplexContainerBeampath.png | Bin 0 -> 7089 bytes .../container/ComplexExampleContainer.png | Bin 0 -> 25103 bytes .../classes/applications/em-structure.rst | 42 +++++ .../classes/applications/mpes-structure.rst | 33 ++++ .../optical-spectroscopy-structure.rst | 66 +++++++ .../classes/base_classes/apm-structure.rst | 177 ++++++++++++++++++ .../container/ComplexContainerBeampath.png | Bin 0 -> 7089 bytes .../container/ComplexExampleContainer.png | Bin 0 -> 25103 bytes .../classes/base_classes/em-structure.rst | 57 ++++++ .../classes/base_classes/mpes-structure.rst | 77 ++++++++ .../optical-spectroscopy-structure.rst | 171 +++++++++++++++++ .../container/ComplexContainerBeampath.png | Bin 0 -> 7089 bytes .../container/ComplexExampleContainer.png | Bin 0 -> 25103 bytes .../ellipsometry-structure.rst | 3 +- .../sample-prep-structure.rst | 18 ++ .../contributed_definitions/sts-structure.rst | 22 +++ 18 files changed, 839 insertions(+), 3 deletions(-) create mode 100644 manual/source/classes/applications/apm-structure.rst create mode 100644 manual/source/classes/applications/container/ComplexContainerBeampath.png create mode 100644 manual/source/classes/applications/container/ComplexExampleContainer.png create mode 100644 manual/source/classes/applications/em-structure.rst create mode 100644 manual/source/classes/applications/mpes-structure.rst create mode 100644 manual/source/classes/applications/optical-spectroscopy-structure.rst create mode 100644 manual/source/classes/base_classes/apm-structure.rst create mode 100644 manual/source/classes/base_classes/container/ComplexContainerBeampath.png create mode 100644 manual/source/classes/base_classes/container/ComplexExampleContainer.png create mode 100644 manual/source/classes/base_classes/em-structure.rst create mode 100644 manual/source/classes/base_classes/mpes-structure.rst create mode 100644 manual/source/classes/base_classes/optical-spectroscopy-structure.rst create mode 100644 manual/source/classes/contributed_definitions/container/ComplexContainerBeampath.png create mode 100644 manual/source/classes/contributed_definitions/container/ComplexExampleContainer.png create mode 100644 manual/source/classes/contributed_definitions/sample-prep-structure.rst create mode 100644 manual/source/classes/contributed_definitions/sts-structure.rst diff --git a/dev_tools/docs/nxdl_index.py b/dev_tools/docs/nxdl_index.py index bcb8ac666b..e3f9c9371c 100644 --- a/dev_tools/docs/nxdl_index.py +++ b/dev_tools/docs/nxdl_index.py @@ -66,13 +66,22 @@ def nxdl_indices() -> Dict[str, dict]: else: file = "" print("---------++++++++-", section) + if file.endswith(("applications/index.rst", "base_classes/index.rst")): + rst_lines.append(f"{indentation}em-structure\n") + rst_lines.append(f"{indentation}optical-spectroscopy-structure\n") + rst_lines.append(f"{indentation}mpes-structure\n") + rst_lines.append(f"{indentation}apm-structure\n") + if file.endswith("contributed_definitions/index.rst"): rst_lines.append(f"{indentation}em-structure\n") - rst_lines.append(f"{indentation}ellipsometry-structure\n") + rst_lines.append(f"{indentation}optical-spectroscopy-structure\n") rst_lines.append(f"{indentation}mpes-structure\n") rst_lines.append(f"{indentation}apm-structure\n") rst_lines.append(f"{indentation}transport-structure\n") + rst_lines.append(f"{indentation}sts-structure\n") rst_lines.append(f"{indentation}cgms-structure\n") + rst_lines.append(f"{indentation}icme-structure\n") + rst_lines.append(f"{indentation}sample-prep-structure\n") for cname in sorted(classes): rst_lines.append(f"{indentation}{cname}\n") @@ -110,6 +119,18 @@ def get_nxclass_description(nxdl_file: Path, namespaces) -> str: *might* be used in an instance of that class. Consider the base classes as a set of *components* that are used to construct a data file. + +Some contributions are grouped together: + :ref:`Optical Spectroscopy ` + + :ref:`Multi-dimensional Photoemission Spectroscopy ` + + :ref:`Atomprobe Microscopy ` + + :ref:`Electron Microscopy ` + +and others are simply listed here: + """, # - - - - - - - - - - - - - - - - - - - - - - - - - - - - "applications": """ @@ -138,6 +159,19 @@ def get_nxclass_description(nxdl_file: Path, namespaces) -> str: In application definitions involving raw data, write the raw data in the :ref:`NXinstrument` tree and then link to it from the location(s) defined in the relevant application definition. + +Some contributions are grouped together: + :ref:`Optical Spectroscopy ` + + :ref:`Multi-dimensional Photoemission Spectroscopy ` + + :ref:`Atomprobe Microscopy ` + + :ref:`Electron Microscopy ` + + +and others are simply listed here: + """, # - - - - - - - - - - - - - - - - - - - - - - - - - - - - "contributed_definitions": """ @@ -160,7 +194,7 @@ def get_nxclass_description(nxdl_file: Path, namespaces) -> str: and acceptance as either a base class or application definition. Some contributions are grouped together: - :ref:`Optical Spectroscopy ` + :ref:`Optical Spectroscopy ` :ref:`Multi-dimensional Photoemission Spectroscopy ` diff --git a/manual/source/classes/applications/apm-structure.rst b/manual/source/classes/applications/apm-structure.rst new file mode 100644 index 0000000000..c8115a4c14 --- /dev/null +++ b/manual/source/classes/applications/apm-structure.rst @@ -0,0 +1,138 @@ +.. _Apm-Structure-APP: + +===================== +Atom-probe tomography +===================== + +.. index:: + IntroductionApm-APP + ApmAppDef-APP + IntroductionApmParaprobe-APP + StatusQuoApm-APP + ApmParaprobeAppDef-APP + ApmGermanNfdi-APP + + +EXAMPLE FOR DOCUMENTATION OF A GROUP OF APPLICATION DEFINITIONS + + +.. _IntroductionApm-APP: + +Introduction +############ + +Set of data schemas to describe the acquisition, i.e. measurement side, the extraction of hits from detector raw data, +steps to compute mass-to-charge state ratios from uncorrected time of flight data, the reconstruction, and the ranging, i.e. identification of peaks in the mass-to-charge-state ratio histogram to detect (molecular) ions. +The data schemas can be useful to generate data artifacts also for field-ion microscopy experiments. + +.. _ApmAppDef-APP: + +Application Definition +###################### + + :ref:`NXapm`: + A general application definition with many detailed places for leaving metadata and computational steps described which are commonly used when reporting the measurement of atom probe data including also detector hit data, as well as how to proceed with reconstructing atom positions from these data, and how to store details about definitions made, which describe how mass-to-charge-state ratio values are mapped to iontypes in a process called ranging. The structure of the schema has been designed to also document a simulation of an atom probe + experiment. Having a combined schema for the measurement and the simulation is beneficial to document that + there are many similarities between the measurement and a computer simulation of it. + +.. _IntroductionApmParaprobe-APP: + +apmtools +######## + +The paraprobe-toolbox is an example of an open-source parallelized software for analyzing +point cloud data, for assessing meshes in 3D continuum space, and for studying the effects of +parameterization on descriptors of micro- and nanoscale structural features (crystal defects) +within materials when characterized and studied with atom probe. + +The need for a thorough documentation of the tools in not only the paraprobe-toolbox +was motivated by several needs: + +First, users of software would like to better understand and also be able to study for themselves +which individual parameters and settings for each tool exist and how configuring these +affects analyses quantitatively. This stresses the aspect how to improve documentation. + +Second, scientific software like paraprobe-toolbox implement numerical/algorithmical +(computational) workflows whereby data coming from multiple input sources +(like previous analysis results) are processed and carried through more involved analyses +within several steps inside the tool. The tool then creates output as files. This +provenance and workflow should be documented. + +Individual tools of paraprobe-toolbox are developed in C/C++ and/or Python. +Provenance tracking is useful as it is one component and requirement for making +workflows exactly numerically reproducible and thus to enable reproducibility (the "R" +of the FAIR principles of data stewardship). + +For tools of the paraprobe-toolbox each workflow step is a pair or triple of sub-steps: +1. The creation of a configuration file. +2. The actual analysis using the Python/or C/C++ tools. +3. The optional analyses/visualization of the results based on data in NeXus/HDF5 files generated by each tool. + +.. _StatusQuoApm-APP: + +What has been achieved so far? +############################## + +This proposal summarizes work of members of the FAIRmat project, which is part of the `German +National Research Data Infrastructure `_. The here detailed +proposal documents how all tools of the paraprobe-toolbox were modified to generate +only well-defined configuration files as accepted input and yield specifically formatted output +files according to the following NeXus application definitions. + +Data and metadata between the tools are exchanged with NeXus/HDF5 files. This means that data +inside HDF5 binary containers are named, formatted, and hierarchically structured according +to application definitions. + +For example the application definition NXapm_paraprobe_config_surfacer specifies +how a configuration file for the paraprobe-surfacer tool should be formatted +and which parameters it contains including optionality and cardinality constraints. + +Thereby, each config file uses a controlled vocabulary of terms. Furthermore, +the config files store a SHA256 checksum for each input file. This implements a full +provenance tracking on the input files along the workflow. + +As an example, a user may first range their reconstruction and then compute spatial +correlation functions. The config file for the ranging tool stores the files +which hold the reconstructed ion position and ranging definitions. +The ranging tool generates a results file with the labels of each molecular ion. +This results file is formatted according to the tool-specific `results` +application definition. The generated results file and the reconstruction is +imported by the spatial statistics tool which again keeps track of all files +and reports its results in a spatial statistics tool results file. + +This design makes it possible to rigorously trace which numerical results were achieved +with specific inputs and settings using specifically-versioned tools. Noteworthy +this includes Y-junction on a graph which is where multiple input sources are +combined to generate new results. + +We are convinced that defining, documenting, using, and sharing application definitions +is useful and future-proof strategy for software development and data analyses as it enables +automated provenance tracking which happens silently in the background. + +Base classes have been defined to group common pieces of information for each tool of the +toolbox. For each tool we define a pair of base classes. One for the configuration (input) side +and one for the results (output) side: + + +.. _ApmParaprobeAppDef-APP: + +Application Definitions +####################### + +NXapm_paraprobe application definitions are in fact pairs of application definitions. +One for the configuration (input) side and one for the results (output) side. For each +tool one such pair is proposed: + + +.. _ApmGermanNfdi-APP: + +Joint work German NFDI consortia NFDI-MatWerk and FAIRmat +####################################################################### + +Members of the NFDI-MatWerk and the FAIRmat consortium of the German National Research Data Infrastructure +are working together within the Infrastructure Use Case IUC09 of the NFDI-MatWerk project to work on examples +how software tools in both consortia become better documented and interoperable to use. Within this project, +we have also added the `CompositionSpace tool that has been developed at the Max-Planck-Institut für Eisenforschung +GmbH in Düsseldorf `_ by A. Saxena et al. + +Specifically, within the IUC09 we refactored the code base behind the publication `A. Saxena et al. `_ to better document its configuration, here as an example implemented like for the above-mentioned paraprobe-toolbox using NeXus: \ No newline at end of file diff --git a/manual/source/classes/applications/container/ComplexContainerBeampath.png b/manual/source/classes/applications/container/ComplexContainerBeampath.png new file mode 100644 index 0000000000000000000000000000000000000000..597cee834c0426bd0e60b1afbf6554a5f3b04a99 GIT binary patch literal 7089 zcmbVxgT!j8lW(I7CP9R3l4E<2>J5 z)AI_IpP{<#g$8#av2ACx&qHz?7*6{wc9+~vb1nw=8zsvCGZ@1U!ma35{YCTeb^go#}G;SGXdmMbu z&k(dLz+>M0rk*>Sf)`6r0rqXS-WdWA6B8%4ZJE%EdqQPyjwzkRB;aOHTl>4)o5x|d zk^nCj4;eIl%(n^F+aGp�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®w_`d`gV3yjY{|b6NDG+(F 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 are used to map isotope to hash values with + which all possible nuclides (stable, radioactive, or synthetically generated ones) can be described. + + :ref:`NXfabrication`: + A base class to bundle manufacturer/technology-partner-specific details about + a component or device of an instrument. + + +Microscopy experiments, not only taking into account those performed on commercial instruments, offer users to apply a set of +data processing steps. Some of them are frequently applied on-the-fly. For now we represent these steps with specifically named +instances of the :ref:`NXprocess` base class. + +Several base classes were defined to document processing of atom probe data with established algorithms: + + +These base classes are examples that substantiate that data processing steps are essential to transform atom probe measurements or simulations into knowledge. Therefore, these steps should be documented +to enable reproducible research, if possible even numerical reproducibility of the results, +and learn how pieces of information are connected. In what follows, an example is presented how an +open-source community software can be modified to use descriptions of these computational steps. + +A detailed inspection of spatial and other type of filters frequently used in analysis of atom probe +data revealed that it is better to define atom-probe-agnostic reusable concepts for filters: + + +The respective research software here is the `paraprobe-toolbox `_ +The software is developed by `M. Kühbach et al. `_. +For atom probe research the proposal can also serve as a blue print how computational steps of other software +tool including commercial ones could be developed further to benefit from NeXus. + +.. _IntroductionApmParaprobe-BC: + +apmtools +######## + +The paraprobe-toolbox is an example of an open-source parallelized software for analyzing +point cloud data, for assessing meshes in 3D continuum space, and for studying the effects of +parameterization on descriptors of micro- and nanoscale structural features (crystal defects) +within materials when characterized and studied with atom probe. + +The need for a thorough documentation of the tools in not only the paraprobe-toolbox +was motivated by several needs: + +First, users of software would like to better understand and also be able to study for themselves +which individual parameters and settings for each tool exist and how configuring these +affects analyses quantitatively. This stresses the aspect how to improve documentation. + +Second, scientific software like paraprobe-toolbox implement numerical/algorithmical +(computational) workflows whereby data coming from multiple input sources +(like previous analysis results) are processed and carried through more involved analyses +within several steps inside the tool. The tool then creates output as files. This +provenance and workflow should be documented. + +Individual tools of paraprobe-toolbox are developed in C/C++ and/or Python. +Provenance tracking is useful as it is one component and requirement for making +workflows exactly numerically reproducible and thus to enable reproducibility (the "R" +of the FAIR principles of data stewardship). + +For tools of the paraprobe-toolbox each workflow step is a pair or triple of sub-steps: +1. The creation of a configuration file. +2. The actual analysis using the Python/or C/C++ tools. +3. The optional analyses/visualization of the results based on data in NeXus/HDF5 files generated by each tool. + +.. _StatusQuoApm-BC: + +What has been achieved so far? +############################## + +This proposal summarizes work of members of the FAIRmat project, which is part of the `German +National Research Data Infrastructure `_. The here detailed +proposal documents how all tools of the paraprobe-toolbox were modified to generate +only well-defined configuration files as accepted input and yield specifically formatted output +files according to the following NeXus application definitions. + +Data and metadata between the tools are exchanged with NeXus/HDF5 files. This means that data +inside HDF5 binary containers are named, formatted, and hierarchically structured according +to application definitions. + +For example the application definition NXapm_paraprobe_config_surfacer specifies +how a configuration file for the paraprobe-surfacer tool should be formatted +and which parameters it contains including optionality and cardinality constraints. + +Thereby, each config file uses a controlled vocabulary of terms. Furthermore, +the config files store a SHA256 checksum for each input file. This implements a full +provenance tracking on the input files along the workflow. + +As an example, a user may first range their reconstruction and then compute spatial +correlation functions. The config file for the ranging tool stores the files +which hold the reconstructed ion position and ranging definitions. +The ranging tool generates a results file with the labels of each molecular ion. +This results file is formatted according to the tool-specific `results` +application definition. The generated results file and the reconstruction is +imported by the spatial statistics tool which again keeps track of all files +and reports its results in a spatial statistics tool results file. + +This design makes it possible to rigorously trace which numerical results were achieved +with specific inputs and settings using specifically-versioned tools. Noteworthy +this includes Y-junction on a graph which is where multiple input sources are +combined to generate new results. + +We are convinced that defining, documenting, using, and sharing application definitions +is useful and future-proof strategy for software development and data analyses as it enables +automated provenance tracking which happens silently in the background. + +Base classes have been defined to group common pieces of information for each tool of the +toolbox. For each tool we define a pair of base classes. One for the configuration (input) side +and one for the results (output) side: + + +.. _ApmParaprobeAppDef-BC: + +Application Definitions +####################### + +NXapm_paraprobe application definitions are in fact pairs of application definitions. +One for the configuration (input) side and one for the results (output) side. For each +tool one such pair is proposed: + + +.. _ApmGermanNfdi-BC: + +Joint work German NFDI consortia NFDI-MatWerk and FAIRmat +####################################################################### + +Members of the NFDI-MatWerk and the FAIRmat consortium of the German National Research Data Infrastructure +are working together within the Infrastructure Use Case IUC09 of the NFDI-MatWerk project to work on examples +how software tools in both consortia become better documented and interoperable to use. Within this project, +we have also added the `CompositionSpace tool that has been developed at the Max-Planck-Institut für Eisenforschung +GmbH in Düsseldorf `_ by A. Saxena et al. + +Specifically, within the IUC09 we refactored the code base behind the publication `A. Saxena et al. `_ to better document its configuration, here as an example implemented like for the above-mentioned paraprobe-toolbox using NeXus: + diff --git a/manual/source/classes/base_classes/container/ComplexContainerBeampath.png b/manual/source/classes/base_classes/container/ComplexContainerBeampath.png new file mode 100644 index 0000000000000000000000000000000000000000..597cee834c0426bd0e60b1afbf6554a5f3b04a99 GIT binary patch literal 7089 zcmbVxgT!j8lW(I7CP9R3l4E<2>J5 z)AI_IpP{<#g$8#av2ACx&qHz?7*6{wc9+~vb1nw=8zsvCGZ@1U!ma35{YCTeb^go#}G;SGXdmMbu z&k(dLz+>M0rk*>Sf)`6r0rqXS-WdWA6B8%4ZJE%EdqQPyjwzkRB;aOHTl>4)o5x|d zk^nCj4;eIl%(n^F+aGp�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®w_`d`gV3yjY{|b6NDG+(F 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 4 degrees of freedom, + cryogenic cooling and other advanced features. + +Four base classes to describe data processing, which can be used as subclasses of :ref:`NXprocess` if describing post-processing or as subclasses of :ref:`NXdetector` if describing live, electronics level processing: + + :ref:`NXcalibration`: + A base class to describe the 1D calibration of an axis, with a function mapping a raw data scale to a calibrated scale with the same number of points. + + :ref:`NXdistortion`: + A base class to describe the 2D distortion correction of an axis, with a matrix mapping a raw data image to a undistorted image. + + :ref:`NXregistration`: + A base class to describe the rigid transformations that are applied to an image. May be redundant as they can be described with :ref:`NXtransformations`. + + :ref:`NXprocess_mpes`: + A base class specializing :ref:`NXprocess`, describing events of data processing, reconstruction, or analysis for photoemission-related data. + +.. _MpesCommonBC-BC: + +Common Base Classes +################### + +There are related base classes that are common to other techniques: + + :ref:`NXlens_em`: + A class to describe all types of lenses. Includes electrostatic lenses for electron energy analysers. + + :ref:`NXdeflector` + A class to describe all kinds of deflectors, including electrostatic and magnetostatic deflectors for electron energy analysers. + + :ref:`NXresolution`: + Describes the resolution of a physical quantity, e.g. the resolution of the MPES spectrometer. + + :ref:`NXfit`, :ref:`NXpeak`, :ref:`NXfit_background`, :ref:`NXfit_function`, :ref:`NXfit_parameter`: + Base classes for describing a fit procedure, e.g. a peak fitting in energy space in XPS. \ No newline at end of file diff --git a/manual/source/classes/base_classes/optical-spectroscopy-structure.rst b/manual/source/classes/base_classes/optical-spectroscopy-structure.rst new file mode 100644 index 0000000000..d3ab7bebb6 --- /dev/null +++ b/manual/source/classes/base_classes/optical-spectroscopy-structure.rst @@ -0,0 +1,171 @@ +.. _Optical-Spectroscopy-Structure-BC: + +==================== +Optical Spectroscopy +==================== + +.. index:: + Ellipsometry-BC + Raman-BC + DispersiveMaterial-BC + + +.. _Ellipsometry-BC: + +Ellipsometry +############ + +Ellipsometry is an optical characterization method to describe optical properties of interfaces and thickness of films. +The measurements are based on determining how the polarization state of light changes upon transmission and reflection. +Interpretation is based on Fresnel equations and numerical models of the optical properties of the materials. + +.. _Raman-BC: + +Raman +############ + +Raman spectroscopy is a characterization method to analyze vibrational properties for liquids, gases, or solids. +The measurements is based on the inelastic light scattering due to the material's vibrations. +Interpretation can be done based on peaks, which represent the phonon properties (intensity, center, width). + +Base Classes +------------ + +This is the set of base classes for describing an optical experiment. + + :ref:`NXbeam_device` + Beam devices are used to relate a beam, which has always at least one origin + and at least one destination. + + By referencing the beam devices with each other, a beam path can be + constructed. This can be used for vizualization or beam propery modeling + along the beam path. + + :ref:`NXbeam` + Beam properties such as intensity, polarization, wavelength or direction. + + :ref:`NXdetector` + A detector for signal detection. + + :ref:`NXsource` + A light source such as laser, lamp or LED. + + :ref:`NXmonochromator` + A monochromator is often used to energetically disperse the scattered or emitted light. + + :ref:`NXlens_opt` + Description of an optical lens. + + :ref:`NXwaveplate` + A waveplate or retarder. + + :ref:`NXsensor` + Specify external parameters that have influenced the sample such as + varied parameters e.g. temperature, pressure, pH value, beam intensity, etc. + + + +.. _DispersiveMaterial-BC: + +Dispersive Material +################### + +A dispersive material is a description for the optical dispersion of materials. +This description may be used to store optical model data from an ellipsometric analysis +(or any other technique) or to build a database of optical constants for optical properties of materials. + +Base Classes +------------ + +There is a set of base classes for describing a dispersion. + + :ref:`NXdispersion` + This is an umbrella base class for a group of dispersion functions to describe the material. + For a simple dispersion it may contain only on NXdispersion_function or NXdispersion_table entry. + If it contains multiple entries the actual dispersion is the sum of all dispersion functions and tables. + This allows for, e.g. splitting real and imaginary parts and describing them seperately or + adding a dielectric background (e.g. Sellmeier model) to an oscillator model (e.g. Lorentz). + + :ref:`NXdispersion_function` + This dispersion is described by a function and its single and repeated parameter values. + It follows a formula of the form ``eps = eps_inf + sum[A * lambda ** 2 / (lambda ** 2 - B ** 2)]`` + (Sellmeier formula). See the formula grammar below for an ebnf grammar for this form. + + :ref:`NXdispersion_single_parameter` + This denotes a parameter which is used outside the summed part of a dispersion function, + e.g. ``eps_inf`` in the formula example above. + + :ref:`NXdispersion_repeated_parameter` + This denotes arrays of repeated parameters which are used to build a sum of parameter values, e.g. + ``A`` and ``B`` are repeated parameters in the formula above. + + :ref:`NXdispersion_table` + This describes a tabular dispersion where the dielectric function is an array versus wavelength or energy. + +Formula Grammar +--------------- + +Below you find a grammar to which the formula should adhere and which can be used to parse and +evaluate the dispersion function. The terms ``single_param_name`` and ``param_name`` should be +filled with the respective single and repeated params from the stored data. +The grammer is written in the `EBNF `_ dialect +of `Lark `_, which is a parsing toolkit for python. +It is easily translatable to general EBNF and other parser generator dialects. +`Here `_ is a reference implementation in Rust/Python with a +`grammar `_ +written in `lalrpop `_. + +.. code-block:: + + ?assignment: "eps" "=" kkr_expression -> eps + | "n" "=" kkr_expression -> n + + ?kkr_expression: expression + | "" "+" "1j" "*" term -> kkr_term + + ?expression: term + | expression "+" term -> add + | expression "-" term -> sub + + ?term: factor + | term "*" factor -> mul + | term "/" factor -> div + + ?factor: power + | power "**" power -> power + + + ?power: "(" expression ")" + | FUNC "(" expression ")" -> func + | "sum" "[" repeated_expression "]" -> sum_expr + | NAME -> single_param_name + | SIGNED_NUMBER -> number + | BUILTIN -> builtin + + ?repeated_expression: repeated_term + | repeated_expression "+" repeated_term -> add + | repeated_expression "-" repeated_term -> sub + + + ?repeated_term: repeated_factor + | repeated_term "*" repeated_factor -> mul + | repeated_term "/" repeated_factor -> div + + ?repeated_factor: repeated_power + | repeated_power "**" repeated_power -> power + + ?repeated_power: "(" repeated_expression ")" + | FUNC "(" repeated_expression ")" -> func + | SIGNED_NUMBER -> number + | NAME -> param_name + | BUILTIN -> builtin + + FUNC.1: "sin" | "cos" | "tan" | "sqrt" | "dawsn" | "ln" | "log" | "heaviside" + BUILTIN.1: "1j" | "pi" | "eps_0" | "hbar" | "h" | "c" + + %import common.CNAME -> NAME + %import common.SIGNED_NUMBER + %import common.WS_INLINE + + %ignore WS_INLINE + diff --git a/manual/source/classes/contributed_definitions/container/ComplexContainerBeampath.png b/manual/source/classes/contributed_definitions/container/ComplexContainerBeampath.png new file mode 100644 index 0000000000000000000000000000000000000000..597cee834c0426bd0e60b1afbf6554a5f3b04a99 GIT binary patch literal 7089 zcmbVxgT!j8lW(I7CP9R3l4E<2>J5 z)AI_IpP{<#g$8#av2ACx&qHz?7*6{wc9+~vb1nw=8zsvCGZ@1U!ma35{YCTeb^go#}G;SGXdmMbu z&k(dLz+>M0rk*>Sf)`6r0rqXS-WdWA6B8%4ZJE%EdqQPyjwzkRB;aOHTl>4)o5x|d zk^nCj4;eIl%(n^F+aGp�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®w_`d`gV3yjY{|b6NDG+(F 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