Files
eco/docs/images/basic_elements.svg
2026-08-18 21:56:17 +02:00

105 lines
5.9 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
"Basic elements" - after the eco intro slide, updated to current eco: the two
local element types are Adjustable and Detector (leaves wired to
EPICS-interfaced hardware). eco also holds *client* objects that represent
external systems it talks to: a DAQ client (to the external DAQ) and a
pipeline client (to the pipeline server; clients still under development).
There is no separate "scan engine" element - scanning is done by acquisition
routines built on the elements below (see concepts.md). Shapes/colours match
assembly.svg for a consistent visual language across the two figures.
-->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 470" font-family="Helvetica, Arial, sans-serif">
<rect x="0" y="0" width="900" height="470" rx="10" fill="#ffffff" stroke="#d0d7de"/>
<!-- environment box -->
<rect x="30" y="40" width="470" height="330" rx="14" fill="none" stroke="#1a1a1a" stroke-width="1.5"/>
<text x="48" y="66" font-size="13" font-weight="700" fill="#1a1a1a">Experiment control environment</text>
<!-- adjustables (red, pentagon "badge") and detectors (blue, "D" shape) -->
<g stroke-linejoin="round" stroke-width="1.5">
<polygon points="60,141 130,141 130,120.3 95,95 60,120.3" fill="#d62828" stroke="#8a1a1a"/>
<polygon points="150,141 220,141 220,120.3 185,95 150,120.3" fill="#d62828" stroke="#8a1a1a"/>
<polygon points="240,141 310,141 310,120.3 275,95 240,120.3" fill="#d62828" stroke="#8a1a1a"/>
<path d="M330,95 H377 A23,23 0 0 1 377,141 H330 Z" fill="#1d4ed8" stroke="#122f80"/>
<path d="M420,95 H467 A23,23 0 0 1 467,141 H420 Z" fill="#1d4ed8" stroke="#122f80"/>
</g>
<!-- EPICS interfaced band -->
<rect x="30" y="235" width="470" height="120" rx="10" fill="#f6dfe8" stroke="#c98aa6" opacity="0.7"/>
<text x="48" y="345" font-size="12" font-weight="700" fill="#7a3350">EPICS interfaced</text>
<!-- hardware glyphs, one per leaf directly above -->
<!-- 1: motor (Adjustable) -->
<circle cx="95" cy="286" r="18" fill="#ffffff" stroke="#1a1a1a" stroke-width="1.5"/>
<text x="95" y="291" text-anchor="middle" font-size="13" font-weight="700" fill="#1a1a1a">M</text>
<!-- 2: amplifier / Schmitt trigger (Adjustable, e.g. a shutter driver) -->
<polygon points="167,266 167,306 203,286" fill="#ffffff" stroke="#1a1a1a" stroke-width="1.5"/>
<path d="M174,298 L174,290 L190,290" fill="none" stroke="#1a1a1a" stroke-width="1.3"/>
<!-- 3: gauge / meter (Adjustable, e.g. an attenuator wheel) -->
<rect x="258" y="268" width="34" height="34" rx="3" fill="#ffffff" stroke="#1a1a1a" stroke-width="1.5"/>
<circle cx="275" cy="285" r="11" fill="none" stroke="#1a1a1a"/>
<path d="M275,285 L281,278" stroke="#1a1a1a" stroke-width="1.3"/>
<circle cx="275" cy="285" r="1.6" fill="#1a1a1a"/>
<!-- 4: photodiode (Detector) -->
<path d="M347,271 L347,301 L365,286 Z" fill="none" stroke="#1a1a1a" stroke-width="1.5"/>
<path d="M365,269 L365,303" stroke="#1a1a1a" stroke-width="1.5"/>
<path d="M335,286 L347,286 M365,286 L379,286" stroke="#1a1a1a" stroke-width="1.3"/>
<path d="M342,262 L350,272 M352,258 L360,268" stroke="#1a1a1a" stroke-width="1.2" fill="none"/>
<!-- 5: camera (Detector, e.g. an area detector IOC) -->
<rect x="433" y="273" width="44" height="30" rx="4" fill="#ffffff" stroke="#1a1a1a" stroke-width="1.5"/>
<rect x="448" y="265" width="14" height="8" rx="2" fill="#ffffff" stroke="#1a1a1a" stroke-width="1.5"/>
<circle cx="455" cy="288" r="9" fill="none" stroke="#1a1a1a" stroke-width="1.5"/>
<circle cx="455" cy="288" r="3.5" fill="#1a1a1a"/>
<!-- element -> hardware, one straight connector per leaf -->
<g stroke="#1a1a1a" fill="none" stroke-width="1">
<path d="M95,141 L95,268"/>
<path d="M185,141 L185,268"/>
<path d="M275,141 L275,268"/>
<path d="M365,141 L365,269"/>
<path d="M455,141 L455,273"/>
</g>
<!-- external systems (clients) -->
<!-- DAQ -->
<rect x="620" y="80" width="230" height="86" rx="10" fill="#eef2f2" stroke="#2f5b5b" stroke-width="1.5"/>
<text x="735" y="108" text-anchor="middle" font-size="13" font-weight="700" fill="#2f5b5b">External DAQ</text>
<text x="735" y="130" text-anchor="middle" font-size="11" fill="#4a5b6b">eco holds a DAQ *client*</text>
<text x="735" y="147" text-anchor="middle" font-size="11" fill="#4a5b6b">(client application to it)</text>
<!-- Pipeline server -->
<rect x="620" y="210" width="230" height="100" rx="10" fill="#f3eefc" stroke="#5b3f8a" stroke-width="1.5"/>
<text x="735" y="238" text-anchor="middle" font-size="13" font-weight="700" fill="#5b3f8a">Pipeline server</text>
<text x="735" y="260" text-anchor="middle" font-size="11" fill="#4a5b6b">eco holds a pipeline *client*</text>
<text x="735" y="277" text-anchor="middle" font-size="11" fill="#4a5b6b">(offload online analysis;</text>
<text x="735" y="294" text-anchor="middle" font-size="11" fill="#4a5b6b">clients still in development)</text>
<!-- client links from environment -->
<g stroke="#1a1a1a" fill="none" stroke-width="1.2" stroke-dasharray="5 4">
<path d="M500,120 L620,120" marker-end="url(#a1)"/>
<path d="M500,180 C560,180 560,255 620,255" marker-end="url(#a1)"/>
</g>
<defs>
<marker id="a1" markerWidth="10" markerHeight="10" refX="7" refY="3" orient="auto">
<path d="M0,0 L7,3 L0,6 Z" fill="#1a1a1a"/>
</marker>
</defs>
<!-- legend -->
<g font-size="12" fill="#1a1a1a">
<polygon points="40,410 66,410 66,401.9 53,392 40,401.9" fill="#d62828" stroke="#8a1a1a" stroke-linejoin="round"/>
<text x="74" y="406">Adjustable (set + read)</text>
<path d="M280,392 H297 A9,9 0 0 1 297,410 H280 Z" fill="#1d4ed8" stroke="#122f80"/>
<text x="314" y="406">Detector (read only)</text>
<rect x="520" y="392" width="26" height="18" rx="3" fill="#eef2f2" stroke="#2f5b5b"/>
<text x="554" y="406">DAQ client</text>
<rect x="680" y="392" width="26" height="18" rx="3" fill="#f3eefc" stroke="#5b3f8a"/>
<text x="714" y="406">Pipeline client</text>
</g>
</svg>