Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions examples/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ use cases are addressed by the architecture, including how the
:caption: Architecture Examples Catalog

aam/index
stem/index
46 changes: 46 additions & 0 deletions examples/stem/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
.. _intersect:arch:examples:stem:

Autonomous Microscopy
=====================

Over the last two decades, aberration corrected :term:`STEM` has become the
mainstay of condensed matter physics, materials science, chemistry,
catalysis, and nanotechnology. Yet both deriving fundamental physical
insights from these multidimensional data sets and further using this
knowledge towards making new and better materials for energy, quantum,
and information technologies is stymied by the dearth of the methods and
the data infrastructure necessary to handle the bespoke data sets.
Similarly, human-driven operation of the microscopes is inherently
limited at the age of fast data acquisition and multidimensional data.
This project establishes the crucial link between the cutting-edge
instrumental platforms at the :term:`CNMS` and the HPC capabilities at ORNL to
enable the next generation of the HPC-driven scientific discovery
(:numref:`intersect:arch:examples:stem:stem`). Specifically, the project
targets three intertwined tasks, including (a) establishing a pipeline
for direct data transfer from the :term:`STEM` to the :term:`MD`/:term:`DFT` environment, (b)
high-fidelity structural reconstructions from 4D :term:`STEM` data, and (c)
enabling the science-driven physical discovery via deep kernel learning.
These targets, while closely linked scientifically, offer complementary
challenges for the data infrastructure, prioritizing :term:`CPU` based
calculations, :term:`GPGPU` and high-volume data transfer, and low-latency :term:`CPU`
operations respectively.

The :term:`Oak Ridge National Laboratory<ORNL>` project team consists of:

- `Maxim Ziatdinov (Principal Investigator) <https://www.ornl.gov/staff-profile/maxim-ziatdinov>`_

.. figure:: stem.png
:name: intersect:arch:examples:stem:stem
:align: center
:width: 800

An autonomous microscopy science use case

.. toctree::
:name: intersect:arch:examples:stem:architecture
:maxdepth: 1
:caption: Architecture

pat
sos
ms
5 changes: 5 additions & 0 deletions examples/stem/ms.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.. _intersect:arch:examples:stem:ms:

Microservices Architecture
--------------------------

75 changes: 75 additions & 0 deletions examples/stem/pat.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
.. _intersect:arch:examples:stem:pat:

Science Use Case Design Patterns
--------------------------------

The autonomous microscopy science use
case :cite:`doi:10.1021/acsnano.1c02104` implements the
Experiment Steering strategic pattern
(:numref:`intersect:arch:examples:stem:pat:strategic`), as an ongoing :term:`STEM`
experiment is controlled by analyses of periodic experiment data. At the
strategic pattern level of abstraction, the individual pattern
components are as follows:

- The experiment plan contains a complete description of the
predetermined actions to be performed for running the experiment,
including any parameters for operating the :term:`STEM`, safety-related
responses and how to analyze and judge experiment progress and change
the plan accordingly. The experiment plan also contains the goal of
the :term:`STEM` experiment to steer it in the right direction and to stop
its closed loop control upon completion.

- The experiment controller executes an experiment using a
predetermined experiment plan and changes the plan’s parameters
during execution based on experiment progress. The plan’s execution
is autonomous, performed in a closed loop control and may involve
human interaction.

- The test performed in an experiment determines the properties of
microscopic structures.

- The experiment result is a combination of raw and analyzed :term:`STEM` data
and insights derived from this data.

.. figure:: pat/strategic.png
:name: intersect:arch:examples:stem:pat:strategic
:align: center

Experiment Steering strategic pattern for the autonomous microscopy
science use case

The autonomous microscopy science use case implements the Distributed
Experiment Steering architectural pattern
(:numref:`intersect:arch:examples:stem:pat:architectural`), as an ongoing :term:`STEM`
experiment is controlled by remote analyses of periodic experiment data.
At the architectural pattern level of abstraction, the individual
pattern components are as follows:

- In addition to the properties identified by the Experiment Steering
strategic pattern, the experiment controller is either local or
remote and may feature a :term:`GUI` or some other :term:`HMI`.

- The actuator is part of the :term:`STEM` and moves the scanning electron
beam.

- The test is performed in the :term:`STEM` experiment determines the
properties of microscopic structures.

- The sensor is part of the :term:`STEM` and provides the raw microscope data.

.. figure:: pat/architectural.png
:name: intersect:arch:examples:stem:pat:architectural
:align: center

Distributed Experiment Steering architectural pattern for the autonomous
microscopy science use case

Note that the strategic and architectural patterns present design
choices and not specifics about the implementation of the design. The
patterns present the overall control, data and work flow, but not the
detailed control messages, data transfers and orchestration. For
example, the analysis system may be a small, dedicated computer, a
larger, shared cluster computer, or an extreme-scale supercomputer. The
controller may be a separate dedicated laptop or server, or co-located
on the analysis system. Data transfers may be file-based or streaming.
Network connections between these components may be dedicated or shared.
154 changes: 154 additions & 0 deletions examples/stem/pat/architectural.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<mxfile host="app.diagrams.net" modified="2023-05-09T20:11:05.823Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" etag="kmPc5QC6UOjJfBAhklp5" version="21.2.9" type="device">
<diagram id="P3egCbBItE-vjyixLVVF" name="Page-1">
<mxGraphModel dx="2714" dy="1491" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Mt6DQvrr-mhTrQ56ljWx-6" value="Remote Analysis System" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;verticalAlign=top;glass=0;sketch=0;shadow=0;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="170" y="390" width="260" height="130" as="geometry" />
</mxCell>
<mxCell id="Mt6DQvrr-mhTrQ56ljWx-5" value="Local or Remote Controller" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;verticalAlign=top;glass=0;sketch=0;shadow=0;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="290" y="90" width="140" height="270" as="geometry" />
</mxCell>
<mxCell id="Mt6DQvrr-mhTrQ56ljWx-3" value="Scanning Transmission Electron Microscope" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;verticalAlign=top;glass=0;sketch=0;shadow=0;strokeWidth=2;" parent="1" vertex="1">
<mxGeometry x="460" y="220" width="260" height="300" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-10" value="&lt;i&gt;&lt;b&gt;Orient&lt;/b&gt;&lt;/i&gt;" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=none;verticalAlign=bottom;" parent="1" vertex="1">
<mxGeometry x="180" y="420" width="240" height="90" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-11" value="&lt;b&gt;&lt;i&gt;Decide&lt;/i&gt;&lt;/b&gt;" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=none;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="300" y="130" width="120" height="210" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-12" value="&lt;b&gt;&lt;i&gt;Act&lt;/i&gt;&lt;/b&gt;" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=none;verticalAlign=top;" parent="1" vertex="1">
<mxGeometry x="470" y="250" width="120" height="90" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-9" value="&lt;i&gt;&lt;b&gt;Observe&lt;/b&gt;&lt;/i&gt;" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fillColor=none;verticalAlign=bottom;" parent="1" vertex="1">
<mxGeometry x="470" y="420" width="240" height="90" as="geometry" />
</mxCell>
<mxCell id="8yW3HtKEOS8D6HbiddwS-1" value="Experiment&lt;br&gt;Plan" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.concepts.document;" parent="1" vertex="1">
<mxGeometry x="210" y="280" width="30" height="40" as="geometry" />
</mxCell>
<mxCell id="8yW3HtKEOS8D6HbiddwS-2" value="(Remote)&lt;br&gt;Controller" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="320" y="280" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="8yW3HtKEOS8D6HbiddwS-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="8yW3HtKEOS8D6HbiddwS-2" target="ZZdG2KbTojn6cw3QZEdF-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="380" y="510" as="sourcePoint" />
<mxPoint x="390" y="330" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="8yW3HtKEOS8D6HbiddwS-4" value="Test" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#d5e8d4;gradientColor=#97d077;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="490" y="360" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-1" value="Sensors" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="490" y="440" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-2" value="Actuators" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="490" y="280" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-3" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-2" target="8yW3HtKEOS8D6HbiddwS-4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="560" as="sourcePoint" />
<mxPoint x="660" y="350" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-5" value="Remote&lt;br&gt;Analyser" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="320" y="440" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-1" target="ZZdG2KbTojn6cw3QZEdF-5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="570" as="sourcePoint" />
<mxPoint x="450" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ZZdG2KbTojn6cw3QZEdF-7" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-5" target="8yW3HtKEOS8D6HbiddwS-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="570" as="sourcePoint" />
<mxPoint x="450" y="520" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-1" value="&lt;br&gt;Local&lt;br&gt;Storage" style="strokeWidth=1;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;labelBackgroundColor=none;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="630" y="430" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-2" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endSize=5;startSize=5;startArrow=block;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-1" target="ivcJ0Vw7QY5pCtP25yYA-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="350" y="550" as="sourcePoint" />
<mxPoint x="630" y="510" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-3" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;startArrow=block;startSize=5;endSize=5;entryPerimeter=0;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-5" target="ivcJ0Vw7QY5pCtP25yYA-14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="480" y="430" as="sourcePoint" />
<mxPoint x="550" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-6" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endSize=5;startSize=5;" parent="1" source="8yW3HtKEOS8D6HbiddwS-4" target="ZZdG2KbTojn6cw3QZEdF-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="450" as="sourcePoint" />
<mxPoint x="460" y="411" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-10" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endSize=5;startSize=5;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="8yW3HtKEOS8D6HbiddwS-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="250" y="300" as="sourcePoint" />
<mxPoint x="700" y="400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-14" value="&lt;br&gt;Local&lt;br&gt;Storage" style="strokeWidth=1;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;labelBackgroundColor=none;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="200" y="430" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-18" value="&lt;br&gt;Local&lt;br&gt;Storage" style="strokeWidth=1;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;labelBackgroundColor=none;fillColor=#fff2cc;gradientColor=#ffd966;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="330" y="160" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-19" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;startArrow=block;startSize=5;endSize=5;" parent="1" source="ivcJ0Vw7QY5pCtP25yYA-18" target="8yW3HtKEOS8D6HbiddwS-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="370" y="490" as="sourcePoint" />
<mxPoint x="370" y="530" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-20" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endSize=5;startSize=5;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-1" target="ZZdG2KbTojn6cw3QZEdF-5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="570" as="sourcePoint" />
<mxPoint x="380" y="610" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ivcJ0Vw7QY5pCtP25yYA-21" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endSize=5;startSize=5;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="ZZdG2KbTojn6cw3QZEdF-5" target="8yW3HtKEOS8D6HbiddwS-2" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="550" y="490" as="sourcePoint" />
<mxPoint x="410" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="53u_tNHBsubDG4iRoRXi-1" value="Raw Experiment&lt;br&gt;Result" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.concepts.document;" parent="1" vertex="1">
<mxGeometry x="770" y="440" width="30" height="40" as="geometry" />
</mxCell>
<mxCell id="53u_tNHBsubDG4iRoRXi-2" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endSize=5;startSize=5;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="ivcJ0Vw7QY5pCtP25yYA-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="790" y="310" as="sourcePoint" />
<mxPoint x="760" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="FbyAllKG4PkfHrCSDohA-5" value="&amp;nbsp;Control&amp;nbsp;" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="750" y="140" as="sourcePoint" />
<mxPoint x="820" y="140" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="FbyAllKG4PkfHrCSDohA-6" value="&amp;nbsp;Data&amp;nbsp;" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endSize=5;startSize=5;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="750" y="170" as="sourcePoint" />
<mxPoint x="820" y="170" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Mt6DQvrr-mhTrQ56ljWx-7" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;endSize=5;startSize=5;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="ivcJ0Vw7QY5pCtP25yYA-14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="130" y="500" as="sourcePoint" />
<mxPoint x="130" y="460" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Mt6DQvrr-mhTrQ56ljWx-8" value="Analyzed Experiment&lt;br&gt;Result" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.concepts.document;" parent="1" vertex="1">
<mxGeometry x="90" y="440" width="30" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Binary file added examples/stem/pat/architectural.pdf
Binary file not shown.
Binary file added examples/stem/pat/architectural.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading