var e=`<div class="wmap-guide">
<style>
.wmap-guide{font-family:system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.65;color:var(--wmap-text,#1a1a1a);padding:24px 32px;max-width:720px;margin:0 auto;overflow-y:auto;height:100%;box-sizing:border-box}
.wmap-guide h1{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:1.35em;font-weight:700;margin:0 0 18px;padding-bottom:10px;border-bottom:2px solid var(--wmap-border,#e2e5ea);color:var(--wmap-text,#111)}
.wmap-guide-version{font-size:11px;font-weight:400;color:var(--wmap-text-muted,#888);white-space:nowrap}
.wmap-guide h2{font-size:1.1em;font-weight:700;margin:28px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--wmap-border,#e9eaec);color:var(--wmap-text,#1a1a1a)}
.wmap-guide h3{font-size:1em;font-weight:700;margin:20px 0 6px;color:var(--wmap-text,#222);display:flex;align-items:center;gap:6px}
.wmap-guide h3 img{width:20px;height:20px;display:inline;vertical-align:middle;border:none;border-radius:0;margin:0}
.wmap-guide p{margin:0 0 12px}
.wmap-guide ul,.wmap-guide ol{margin:0 0 12px;padding-left:22px}
.wmap-guide li{margin-bottom:4px}
.wmap-guide table{border-collapse:collapse;width:100%;margin:0 0 16px;font-size:13px}
.wmap-guide th{background:var(--wmap-panel-bg,#f4f5f7);text-align:left;padding:7px 10px;font-weight:600;border:1px solid var(--wmap-border,#d8dce2)}
.wmap-guide td{padding:6px 10px;border:1px solid var(--wmap-border,#e2e5ea);vertical-align:middle}
.wmap-guide tr:nth-child(even) td{background:var(--wmap-bg-hover,#fafbfc)}
.wmap-guide strong{font-weight:600}
.wmap-guide code{font-family:monospace;font-size:12px;background:var(--wmap-bg-active,#f0f2f5);padding:1px 4px;border-radius:3px}
.wmap-guide hr{border:none;border-top:1px solid var(--wmap-border,#e9eaec);margin:24px 0}
.wmap-guide img{max-width:100%;height:auto;border:1px solid var(--wmap-border,#e2e5ea);border-radius:6px;margin:8px 0;display:block}
.wmap-guide td img{width:20px;height:20px;max-width:none;display:inline-block;vertical-align:middle;border:none;border-radius:0;margin:0}
.wmap-guide a{color:var(--wmap-icon-active,#0066cc);text-decoration:none}
.wmap-guide a:hover{text-decoration:underline}
.wmap-guide-online-link{font-size:12px;color:var(--wmap-text-muted,#555);margin:-8px 0 18px;padding:8px 12px;background:var(--wmap-panel-bg,#f4f5f7);border-radius:4px;border-left:3px solid var(--wmap-border,#c0c4cc)}
.wmap-guide-online-link a{color:var(--wmap-icon-active,#0066cc)}
.wmap-demo{width:100%;height:220px;margin:12px 0;border:1px solid #e2e5ea;border-radius:6px;overflow:hidden;background:#f8f9fa}
.wmap-demo[data-wmap-demo="gallery"]{height:380px}
.wmap-demo[data-wmap-demo="findings"]{height:280px}
.wmap-demo[data-wmap-demo="summary-panel"]{height:300px}
.wmap-demo[data-wmap-demo="box-select"]{height:280px}
.wmap-demo[data-wmap-demo="analysis"]{height:600px}
.wmap-guide--max{max-width:1000px}
@media print{
  /* Print only the guide's own content, never the host page, and never a
     clipped single screenful. The guide window opens one of two ways
     (toolbar.ts's openUserGuideWindow) and this must handle both:
     - a real popup (openGuideInPopup): buildGuideContent's content div
       (class wmap-guide-content) is body's ONLY child directly \u2014 body
       itself is height:100vh;overflow:hidden for the screen layout, which
       without an override clips print to a single blank-looking page.
     - the in-page floating-window fallback (openGuideInFloatingWindow,
       used whenever window.open() is blocked \u2014 e.g. always in Tauri):
       the same content div sits inside .wmap-window-box, itself a sibling
       of the rest of the host page's own content, which must stay hidden.
     Both need: undo the screen-only height/overflow clipping (100vh/
     overflow:hidden bodies, flex:1/overflow:auto content panes) so the
     guide can paginate over multiple printed pages instead of clipping to
     one, hide anything that isn't the guide itself, and drop the
     print-irrelevant "view online" banner. */
  body{overflow:visible!important;height:auto!important}
  /* Hide everything except the guide's own content div (covers the real-
     popup case, where content is body's only child) and .wmap-window-box
     (covers the floating-window case, where content is nested inside it \u2014
     that subtree gets its own unclip rules below rather than being hidden
     here). */
  body > *:not(.wmap-guide-content):not(.wmap-window-box){display:none!important}
  .wmap-guide-content{flex:none!important;overflow:visible!important;height:auto!important;min-height:0!important}
  body > .wmap-window-box{position:static!important;width:auto!important;height:auto!important;max-width:none!important;max-height:none!important;box-shadow:none!important;border-radius:0!important;overflow:visible!important;display:block!important}
  .wmap-window-box > div:first-child{display:none!important}
  /* contentWrap (flex container) and the scroll wrapper inside it both clip/scroll;
     unclip them so the full guide paginates instead of one screenful printing. */
  .wmap-window-box > div:not(:first-child),.wmap-window-box > div:not(:first-child) > div{display:block!important;overflow:visible!important;height:auto!important;flex:none!important;min-height:0!important}
  .wmap-guide,.wmap-guide--max{max-width:none!important;height:auto!important;overflow:visible!important;padding:0!important}
  .wmap-guide-online-link{display:none!important}
}
</style>
<h1 id="wafer-map-user-guide">Wafer Map \u2014 User Guide<span class="wmap-guide-version" title="Built 2026-08-18T13:34:15.820Z">v0.23.1</span></h1>
<p class="wmap-guide-online-link">This is a quick reference. <a href="https://wafertools.github.io/wafermap/user-guide/" target="_blank" rel="noopener">View the full illustrated guide online \u2197</a></p>
<p>This guide describes the display and analysis features of the wafer map viewer.
It is written for users who may be semiconductor test engineers, device engineers, and yield engineers
or anyone else who may use a wafer map application \u2014 not for developers integrating the wafermap library.</p>
<p>Some features depend on what data the application has loaded (bin names, test
definitions, spec limits, reticle geometry). Where this applies it is noted.</p>
<p><strong>Getting oriented.</strong> The wafer map is an interactive viewer. A toolbar is always
present at the top-right of the map \u2014 use it to change what the colours represent,
toggle overlays, rotate or flip the wafer, zoom, select dies, and open the summary
panel. Hover any die for a tooltip; the panels and tooltips always report the
original die grid coordinates, never the on-screen position after a rotate or flip.</p>
<hr>
<h2 id="1-reading-the-map">1. Reading the map</h2>
<h3 id="11-die-grid-and-coordinates">1.1 Die grid and coordinates</h3>
<p>Each square on the wafer represents one die. The position labels you see \u2014 in
tooltips, axis ticks, and selection readouts \u2014 are <strong>die grid coordinates</strong>: usually the
X and Y step indices from the prober (integers such as \u22127, 0, 5). They are not
millimetre values.</p>
<p>These coordinates are always the original grid values. Rotating or flipping the
display does not change the coordinate labels \u2014 a die at (3, \u22122) always reads
(3, \u22122) regardless of how the wafer is oriented on screen.</p>
<h3 id="12-wafer-orientation">1.2 Wafer orientation</h3>
<p>The notch (shown as a V-notch or flat edge) marks the physical reference edge of
the wafer as configured. Use the <strong>Orientation</strong> toolbar controls to rotate or flip
the display to match your convention; die coordinates are unaffected.</p>
<div data-wmap-demo="bin-map" class="wmap-demo"></div><p><em>An example wafer bin map above and below the same wafer rotated 90\xB0. The notch has moved, but die coordinates \u2014 shown in tooltips \u2014 remain their original grid/prober values.</em></p>
<div data-wmap-demo="orientation" class="wmap-demo"></div><h3 id="13-die-appearance">1.3 Die appearance</h3>
<table>
<thead>
<tr>
<th>Appearance</th>
<th>Meaning</th>
</tr>
</thead>
<tbody><tr>
<td>Solid colour</td>
<td>Active plot value \u2014 bin category or test measurement</td>
</tr>
<tr>
<td>Muted grey at perimeter</td>
<td>Partial die \u2014 falls outside the wafer circle boundary</td>
</tr>
<tr>
<td>Neutral grey (interior)</td>
<td>No data \u2014 die has no bin or test result in the loaded dataset</td>
</tr>
<tr>
<td>Dimmed fill (interior)</td>
<td>Edge-excluded die \u2014 falls within the edge exclusion band configured for this wafer</td>
</tr>
</tbody></table>
<p>No-data grey and partial-die grey are visually distinct. A no-data die is not a
fail; it simply has no result recorded. Edge-excluded dies are shown dimmed and are
not counted in yield calculations.</p>
<h3 id="14-legend-and-colorbar">1.4 Legend and colorbar</h3>
<p><strong>Bin modes</strong> show a discrete colour legend: one swatch per bin, with bin number
and name if the application has supplied bin names.</p>
<p><strong>Value mode</strong> shows a continuous colorbar: the colour scale runs from the minimum
to maximum value, with units when available. The colorbar is informational only \u2014
clicking it has no effect. To switch to a pass/fail view, use the <strong>Spec pass/fail</strong>
or <strong>Test pass/fail</strong> option in the Overlays menu (available when spec limits are
defined, or a recorded verdict exists, for the active test).</p>
<p><strong>Spec pass/fail mode</strong> replaces the colorbar with a small <strong>spec legend</strong>: Pass,
Fail high, and Fail low swatches (only the categories that apply to the test&#39;s
limits) with a die count beside each. This judges dies against the test&#39;s spec
limits (<code>limitLow</code> / <code>limitHigh</code>).</p>
<p><strong>Test pass/fail mode</strong> replaces the colorbar with a <strong>Pass / Fail legend</strong> and die
counts, coloured by the tester&#39;s own <strong>recorded</strong> verdict for that test \u2014 not a
spec-limit judgement. A test with no measured value (a functional, go/no-go test)
always displays this way; selecting it switches the map into Test pass/fail
automatically, since there is nothing to plot on a gradient.</p>
<p>Every map also shows a short <strong>title</strong> by the colorbar or legend naming what is
displayed \u2014 the test name (and number, in spec mode), the bin type, or the stacked
wafer count.</p>
<p>Clicking a bin swatch in the legend filters the display to that bin
(see <a href="#3-toolbar-controls" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'3-toolbar-controls\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Highlight bin</a>).</p>
<hr>
<h2 id="2-plot-modes">2. Plot modes</h2>
<p>The active plot mode determines what the colour of each die represents. Use the
<strong>Plot mode</strong> toolbar dropdown to switch. Available modes depend on what data the
application has loaded.</p>
<table>
<thead>
<tr>
<th>Mode</th>
<th>Colour represents</th>
<th>Typical use</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Hard Bin</strong></td>
<td>Physical sort result (hard bin number)</td>
<td>Yield categorisation, pass/fail map</td>
</tr>
<tr>
<td><strong>Soft Bin</strong></td>
<td>Test-program failure category (soft bin number)</td>
<td>Failure mode breakdown</td>
</tr>
<tr>
<td><strong>Test Value</strong></td>
<td>A single numeric measurement</td>
<td>Parametric heatmap \u2014 leakage, Idsat, Vth, etc.</td>
</tr>
<tr>
<td><strong>Stacked Hard Bins</strong></td>
<td>Hard bin occurrence counts aggregated across multiple wafers</td>
<td>Lot-level yield patterns</td>
</tr>
<tr>
<td><strong>Stacked Soft Bins</strong></td>
<td>Soft bin occurrence counts aggregated across multiple wafers</td>
<td>Lot-level failure mode patterns</td>
</tr>
<tr>
<td><strong>Stacked Test Values</strong></td>
<td>Aggregated test values across multiple wafers</td>
<td>Lot-level parametric trends</td>
</tr>
</tbody></table>
<p>Stacked modes are only available on lot-stack maps (multiple wafers combined into
one display). The panel identifies how many wafers were stacked and which
aggregation method is active.</p>
<h3 id="test-value-mode-colorbar-range-and-spec-limits">Test Value mode \u2014 colorbar range and spec limits</h3>
<p>When spec limits are defined for the active test, two additional display options
become available:</p>
<ul>
<li><strong>Colorbar range \u2014 Data / Spec</strong>: switches the colorbar scale between the
actual data extent and the spec limit bounds. This affects only the colorbar&#39;s
range, never how out-of-spec dies are shown. In <strong>both</strong> ranges every die is
coloured by the gradient so you can read the value distribution, and out-of-spec
dies are marked with a triangle \u2014 pointing <strong>down (\u25BD) for below LSL</strong>, <strong>up (\u25B3)
for above USL</strong> \u2014 so they stand out without leaving the distribution. The
triangle is drawn black or white per die for contrast against its own colour, so
it stays visible under any colour scheme, and its shape (not colour) carries the
below/above-limit meaning.</li>
<li><strong>Spec pass/fail</strong>: when active, dies within spec are shown in a pass colour
and dies outside spec are highlighted \u2014 <strong>blue for below the Lower Spec Limit
(LSL)</strong>, <strong>red for above the Upper Spec Limit (USL)</strong>. Both flags apply
independently; a die can be flagged on either or both limits. A spec legend
replaces the colorbar, listing each applicable category with its die count.</li>
</ul>
<p>Some tests have no measured value at all \u2014 a continuity check or any other
go/no-go test, where the only result is a recorded pass or fail. Selecting one
of these <strong>functional tests</strong> as the active test switches the map into
<strong>Test pass/fail</strong> automatically: a Pass/Fail legend by die count, coloured by
the tester&#39;s own recorded verdict rather than a spec-limit judgement (there is
no gradient to fall back to). <strong>Test pass/fail</strong> is also available as an
Overlays option on an ordinary parametric test when it carries recorded
verdicts, as an alternative to spec-limit judgement.</p>
<div data-wmap-demo="value-heatmap" class="wmap-demo"></div><div data-wmap-demo="spec-passfail" class="wmap-demo"></div><hr>
<h2 id="3-toolbar-controls">3. Toolbar controls</h2>
<p>The toolbar sits at the top-right of the map and is always visible. Controls that
are not applicable to the current mode are hidden automatically. (Hovering the map
shows die tooltips \u2014 a separate thing from the toolbar, which is always present.)</p>
<p><img src="data:image/png;base64, " alt="Single-map toolbar"></p>
<h3 id="single-map">Single map</h3>
<table>
<thead>
<tr>
<th></th>
<th>Control</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjciIHJ4PSI5IiByeT0iNCIgLz4KICAKICA8ZyBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS40IiBvcGFjaXR5PSIwLjg1Ij4KICAgIDxsaW5lIHgxPSI0IiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyIgLz4KICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMuNSIgeDI9IjEyIiB5Mj0iMTAuNSIgLz4KICA8L2c+CiAgCiAgPHBhdGggZD0iTTMgMTIgYzAgMi41IDQgNCA5IDQgczktMS41IDktNCIgLz4KICAKICA8cGF0aCBkPSJNMyAxNyBjMCAyLjUgNCA0IDkgNCBzOS0xLjUgOS00IiAvPgo8L3N2Zz4K" width="20" height="20"></td>
<td>Plot mode</td>
<td>Switches the active plot mode (see <a href="#2-plot-modes" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'2-plot-modes\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Section 2</a>). When multiple tests are available, a test selector appears alongside it.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDEyczMuNi03IDEwLTcgMTAgNyAxMCA3LTMuNiA3LTEwIDctMTAtNy0xMC03eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Overlays</td>
<td>Check-menu of optional display layers: XY axis indicator, ring boundaries, quadrant lines, die coordinate labels, reticle grid (when geometry is configured), Spec pass/fail (Test Value mode with limits), and Test pass/fail (Test Value mode, active test is functional or has recorded verdicts).</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIi8+PHBhdGggZD0iTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoiLz48cGF0aCBkPSJNOSA4Yy0xLjgwNCAyLjcxLTMuOTcgMy40Ni02LjU4MyAzLjk0OGEuNTA3LjUwNyAwIDAgMC0uMzAyLjgxOWw3LjMyIDguODgzYTEgMSAwIDAgMCAxLjE4NS4yMDRDMTIuNzM1IDIwLjQwNSAxNiAxNi43OTIgMTYgMTUiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Colour scheme</td>
<td>Switches the colour palette used for value and stacked modes. Available schemes depend on what the application has registered.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDIxIEw1IDMiLz48cGF0aCBkPSJNMy41IDUgTDUgMyBMNi41IDUiLz48cGF0aCBkPSJNNSAyMSBMMjEgMjEiLz48cGF0aCBkPSJNMTkgMTkuNSBMMjEgMjEgTDE5IDIyLjUiLz48cGF0aCBkPSJNNiAyMCBDIDYgMTIsIDEwIDcsIDIwIDYiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Log scale</td>
<td>Test Value and Stacked Test Values modes only. Applies a log\u2081\u2080 scale to the colour mapping. Only active when all displayed values are positive. Hidden whenever a pass/fail display is active or the active test is functional.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDQgTDUgMjAiLz48cGF0aCBkPSJNNSA0IEw4IDQiLz48cGF0aCBkPSJNNSAyMCBMOCAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxOSAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxNiA0Ii8+PHBhdGggZD0iTTE5IDIwIEwxNiAyMCIvPjxwYXRoIGQ9Ik01IDEyIEwxOSAxMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Colorbar range</td>
<td>Test Value mode with spec limits only. Toggles the colorbar between the <strong>spec-limit range</strong> (default \u2014 the colours mean the same thing on every wafer, so maps are comparable) and the <strong>data range</strong> (stretches the scale to the values actually present, which shows more contrast but is not comparable between wafers).</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjciIHg9IjMiIHk9IjMiIHJ4PSIxIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMyIgeT0iMTQiIHJ4PSIxIi8+PHBhdGggZD0iTTE0IDRoNyIvPjxwYXRoIGQ9Ik0xNCA5aDciLz48cGF0aCBkPSJNMTQgMTVoNyIvPjxwYXRoIGQ9Ik0xNCAyMGg3Ii8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Legend style</td>
<td>Bin modes only. Controls where the bin legend is positioned relative to the map: Default (right), Compact, Left, Top, Bottom, or Floating.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlnb24gcG9pbnRzPSIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzYiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjwvc3ZnPgo=" width="20" height="20"></td>
<td>Orientation</td>
<td>Menu of display transforms: <strong>Rotate 90\xB0 clockwise</strong> (applies cumulatively), <strong>Flip horizontal</strong>, <strong>Flip vertical</strong>. These change only how the wafer is drawn \u2014 die coordinates in tooltips and labels are always the original values, whatever the orientation.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xMyAxMy41IDItMi41LTItMi41Ii8+PHBhdGggZD0ibTIxIDIxLTQuMy00LjMiLz48cGF0aCBkPSJNOSA4LjUgNyAxMWwyIDIuNSIvPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Zoom mode</td>
<td>Click and drag to draw a zoom region.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iMTEiIHgyPSIxMSIgeTE9IjgiIHkyPSIxNCIvPjxsaW5lIHgxPSI4IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjExIi8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Zoom in</td>
<td>Zooms in one step.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIvPjwvc3ZnPgo=" width="20" height="20"></td>
<td>Zoom out</td>
<td>Zooms out one step.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIvPjxwYXRoIGQ9Ik0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6Ii8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Reset zoom</td>
<td>Returns the map to the default fitted view.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMiAydjIwIi8+PHBhdGggZD0ibTE1IDE5LTMgMy0zLTMiLz48cGF0aCBkPSJtMTkgOSAzIDMtMyAzIi8+PHBhdGggZD0iTTIgMTJoMjAiLz48cGF0aCBkPSJtNSA5LTMgMyAzIDMiLz48cGF0aCBkPSJtOSA1IDMtMyAzIDMiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Pan mode</td>
<td>Click and drag to pan the map.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDNhMiAyIDAgMCAwLTIgMiIvPjxwYXRoIGQ9Ik0xOSAzYTIgMiAwIDAgMSAyIDIiLz48cGF0aCBkPSJNMjEgMTlhMiAyIDAgMCAxLTIgMiIvPjxwYXRoIGQ9Ik01IDIxYTIgMiAwIDAgMS0yLTIiLz48cGF0aCBkPSJNOSAzaDEiLz48cGF0aCBkPSJNOSAyMWgxIi8+PHBhdGggZD0iTTE0IDNoMSIvPjxwYXRoIGQ9Ik0xNCAyMWgxIi8+PHBhdGggZD0iTTMgOXYxIi8+PHBhdGggZD0iTTIxIDl2MSIvPjxwYXRoIGQ9Ik0zIDE0djEiLz48cGF0aCBkPSJNMjEgMTR2MSIvPjwvc3ZnPgo=" width="20" height="20"></td>
<td>Box select</td>
<td>Click and drag to select a rectangular group of dies (see <a href="#43-box-select" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'43-box-select\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Section 4.3</a>).</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjkiLz48cGF0aCBkPSJNMTMgMTdWNSIvPjxwYXRoIGQ9Ik04IDE3di0zIi8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Insights</td>
<td>Swaps the map for this wafer&#39;s own chart suite \u2014 yield, bin breakdown, process capability, and more (see <a href="#8-insights-tab" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'8-insights-tab\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Section 8</a>). Only shown when the application has enabled it.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNSAzaDZ2NiIvPjxwYXRoIGQ9Ik05IDIxSDN2LTYiLz48cGF0aCBkPSJNMjEgM2wtNyA3Ii8+PHBhdGggZD0iTTMgMjFsNy03Ii8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Expand</td>
<td>Opens the map in an enlarged modal overlay. A maximise button in the modal grows it to fill the window (or press <strong>F</strong>). Press <strong>Esc</strong> or click outside to close. Useful for detailed inspection without changing the main view. Hidden while the Insights tab is open \u2014 each chart inside Insights has its own expand button instead.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Save image</td>
<td>Downloads the current map view as a PNG. Captures the canvas as displayed, including all active overlays and the legend.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNOCAydjQiLz48cGF0aCBkPSJNMTIgMnY0Ii8+PHBhdGggZD0iTTE2IDJ2NCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgeD0iNCIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMGg2Ii8+PHBhdGggZD0iTTggMTRoOCIvPjxwYXRoIGQ9Ik04IDE4aDUiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Findings</td>
<td>Opens or closes the Findings sidebar (see <a href="#6-findings-sidebar" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'6-findings-sidebar\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Section 6</a>).</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTAuMjkgMy44NiAxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6Ii8+PHBhdGggZD0iTTEyIDl2NCIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Data warnings</td>
<td>Appears <strong>only when there is something to report</strong> about the data behind the map. Click it for the details. A red \u26D4 means the map may be positionally wrong \u2014 usually that wafer geometry was guessed rather than supplied, so dies may not sit where they appear to. An amber \u26A0 means something expected is missing or was skipped, but what is drawn is correct.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K" width="20" height="20"></td>
<td>User guide</td>
<td>Opens this guide.</td>
</tr>
</tbody></table>
<p><strong>This guide&#39;s own window</strong> (and a gallery card detached into its own window,
see <a href="#gallery" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'gallery\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Section 3 \u2014 Gallery</a> below) is a floating window, not a modal \u2014
its header shows minimize, maximize, and close buttons, and it can be dragged
and resized by its corner grip. Minimizing collapses it to a small title strip
without closing it; click it again to restore.</p>
<p><strong>Highlight bin</strong> \u2014 in bin modes, click any bin swatch in the legend to highlight
that bin and dim all others. Click again to clear. Useful for isolating a specific
failure category across the wafer.</p>
<div data-wmap-demo="bin-highlight" class="wmap-demo"></div><p><em>Bin 2 (Fail) highlighted \u2014 all other bins are dimmed.</em></p>
<h3 id="overlays">Overlays</h3>
<p>Use the <strong>Overlays</strong> menu to toggle optional display layers on and off:</p>
<ul>
<li><strong>XY axis indicator</strong> \u2014 shows X and Y axis lines through the wafer centre</li>
<li><strong>Ring boundaries</strong> \u2014 concentric ring divisions that match the spatial analysis zones</li>
<li><strong>Quadrant lines</strong> \u2014 divides the wafer into N, S, E, W quadrants</li>
<li><strong>Die coordinate labels</strong> \u2014 draws the (x, y) grid position inside each die (useful at high zoom)</li>
<li><strong>Reticle grid</strong> \u2014 stepper field grid (only shown when reticle geometry is configured)</li>
<li><strong>Spec pass/fail</strong> \u2014 pass/fail colouring for Test Value mode, judged against spec limits, when the active test defines them</li>
<li><strong>Test pass/fail</strong> \u2014 pass/fail colouring for Test Value mode, coloured by the tester&#39;s recorded verdict; always on for a functional (no measured value) active test</li>
</ul>
<div data-wmap-demo="overlays" class="wmap-demo"></div><p><em>Ring boundaries, quadrant lines, and XY indicator all active.</em></p>
<h3 id="keyboard-shortcuts">Keyboard shortcuts</h3>
<table>
<thead>
<tr>
<th>Key</th>
<th>Action</th>
</tr>
</thead>
<tbody><tr>
<td><strong>E</strong></td>
<td>Open the map in an enlarged modal overlay</td>
</tr>
<tr>
<td><strong>F</strong></td>
<td>Maximise / restore the modal (when expanded)</td>
</tr>
<tr>
<td><strong>Esc</strong></td>
<td>Close the expanded modal, or clear the die selection</td>
</tr>
<tr>
<td><strong>Ctrl / Cmd + click</strong></td>
<td>Add a die to the current selection</td>
</tr>
<tr>
<td><strong>Mouse wheel / scroll</strong></td>
<td>Zoom in and out at the cursor</td>
</tr>
<tr>
<td><strong>Ctrl / Cmd + <code>+</code></strong> / <strong><code>-</code></strong></td>
<td>Zoom in / zoom out</td>
</tr>
<tr>
<td><strong>Ctrl / Cmd + <code>0</code></strong></td>
<td>Reset zoom to the fitted view</td>
</tr>
<tr>
<td><strong>Arrow keys</strong></td>
<td>Pan the map</td>
</tr>
<tr>
<td><strong>Space (hold) + drag</strong></td>
<td>Temporarily pan without leaving the current tool</td>
</tr>
</tbody></table>
<h3 id="gallery">Gallery</h3>
<p>The gallery control bar applies to all cards simultaneously.</p>
<table>
<thead>
<tr>
<th></th>
<th>Control</th>
<th>Description</th>
</tr>
</thead>
<tbody><tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjciIHJ4PSI5IiByeT0iNCIgLz4KICAKICA8ZyBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS40IiBvcGFjaXR5PSIwLjg1Ij4KICAgIDxsaW5lIHgxPSI0IiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyIgLz4KICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMuNSIgeDI9IjEyIiB5Mj0iMTAuNSIgLz4KICA8L2c+CiAgCiAgPHBhdGggZD0iTTMgMTIgYzAgMi41IDQgNCA5IDQgczktMS41IDktNCIgLz4KICAKICA8cGF0aCBkPSJNMyAxNyBjMCAyLjUgNCA0IDkgNCBzOS0xLjUgOS00IiAvPgo8L3N2Zz4K" width="20" height="20"></td>
<td>Plot mode</td>
<td>Switches the plot mode for all cards.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDEyczMuNi03IDEwLTcgMTAgNyAxMCA3LTMuNiA3LTEwIDctMTAtNy0xMC03eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Overlays</td>
<td>Toggles display layers for all cards simultaneously.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIi8+PHBhdGggZD0iTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoiLz48cGF0aCBkPSJNOSA4Yy0xLjgwNCAyLjcxLTMuOTcgMy40Ni02LjU4MyAzLjk0OGEuNTA3LjUwNyAwIDAgMC0uMzAyLjgxOWw3LjMyIDguODgzYTEgMSAwIDAgMCAxLjE4NS4yMDRDMTIuNzM1IDIwLjQwNSAxNiAxNi43OTIgMTYgMTUiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Colour scheme</td>
<td>Switches the colour palette for all cards.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlnb24gcG9pbnRzPSIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzYiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjwvc3ZnPgo=" width="20" height="20"></td>
<td>Orientation</td>
<td>Opens the rotate/flip controls, applied to all cards.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxyZWN0IHg9IjMiIHk9IjMiIHdpZHRoPSI0IiBoZWlnaHQ9IjE4IiByeD0iMSIvPgogIDxyZWN0IHg9IjEwIiB5PSIzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxOCIgcng9IjEiLz4KICA8cmVjdCB4PSIxNyIgeT0iMyIgd2lkdGg9IjQiIGhlaWdodD0iMTgiIHJ4PSIxIi8+Cjwvc3ZnPgo=" width="20" height="20"></td>
<td>Columns</td>
<td>Sets the number of columns in the card grid.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PGNpcmNsZSBjeD0iNS41IiBjeT0iNC41IiByPSIwLjgiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjxjaXJjbGUgY3g9IjgiIGN5PSI0LjUiIHI9IjAuOCIgZmlsbD0iIzM3NDE1MSIgc3Ryb2tlPSJub25lIi8+PGNpcmNsZSBjeD0iNS41IiBjeT0iNyIgcj0iMC44IiBmaWxsPSIjMzc0MTUxIiBzdHJva2U9Im5vbmUiLz48Y2lyY2xlIGN4PSI4IiBjeT0iNyIgcj0iMC44IiBmaWxsPSIjMzc0MTUxIiBzdHJva2U9Im5vbmUiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Save image</td>
<td>Downloads the full gallery grid as a single PNG.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xOCA0SDZsNiA4LTYgOGgxMiIvPjwvc3ZnPgo=" width="20" height="20"></td>
<td>Aggregation method</td>
<td>Stacked modes only. Selects how values from multiple wafers are combined per die position: Mean, Median, Std Dev, Min, Max, or Count.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDIxIEw1IDMiLz48cGF0aCBkPSJNMy41IDUgTDUgMyBMNi41IDUiLz48cGF0aCBkPSJNNSAyMSBMMjEgMjEiLz48cGF0aCBkPSJNMTkgMTkuNSBMMjEgMjEgTDE5IDIyLjUiLz48cGF0aCBkPSJNNiAyMCBDIDYgMTIsIDEwIDcsIDIwIDYiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Log scale</td>
<td>Test Value and Stacked Test Values modes only. Applies a log\u2081\u2080 scale to the colour mapping for all cards.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjciIHg9IjMiIHk9IjMiIHJ4PSIxIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMyIgeT0iMTQiIHJ4PSIxIi8+PHBhdGggZD0iTTE0IDRoNyIvPjxwYXRoIGQ9Ik0xNCA5aDciLz48cGF0aCBkPSJNMTQgMTVoNyIvPjxwYXRoIGQ9Ik0xNCAyMGg3Ii8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Legend style</td>
<td>Bin modes only. Sets where the bin legend sits relative to each card.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDQgTDUgMjAiLz48cGF0aCBkPSJNNSA0IEw4IDQiLz48cGF0aCBkPSJNNSAyMCBMOCAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxOSAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxNiA0Ii8+PHBhdGggZD0iTTE5IDIwIEwxNiAyMCIvPjxwYXRoIGQ9Ik01IDEyIEwxOSAxMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Colorbar range</td>
<td>Test Value mode with spec limits only. Toggles all cards between the spec-limit range and the data range. Leave it on spec limits when comparing wafers \u2014 the data range rescales per view.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNOCAydjQiLz48cGF0aCBkPSJNMTIgMnY0Ii8+PHBhdGggZD0iTTE2IDJ2NCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgeD0iNCIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMGg2Ii8+PHBhdGggZD0iTTggMTRoOCIvPjxwYXRoIGQ9Ik04IDE4aDUiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Findings</td>
<td>Opens or closes the lot-level Findings sidebar.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjkiLz48cGF0aCBkPSJNMTMgMTdWNSIvPjxwYXRoIGQ9Ik04IDE3di0zIi8+PC9zdmc+Cg==" width="20" height="20"></td>
<td>Insights</td>
<td>Swaps the grid for a lot-wide chart suite \u2014 yield, bin breakdown, process capability, and more (see <a href="#8-insights-tab" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'8-insights-tab\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Section 8</a>). Only shown when the application has enabled it.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTAuMjkgMy44NiAxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6Ii8+PHBhdGggZD0iTTEyIDl2NCIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K" width="20" height="20"></td>
<td>Data warnings</td>
<td>Appears only when something is worth reporting about the lot. Collected across every wafer and de-duplicated, so a problem affecting the whole lot is stated once rather than repeated per card.</td>
</tr>
<tr>
<td><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K" width="20" height="20"></td>
<td>User guide</td>
<td>Opens this guide.</td>
</tr>
</tbody></table>
<p>Click a card&#39;s expand button to detach it into its own separate window with the
complete single-map toolbar (falls back to a floating window inside the page if
separate windows aren&#39;t available in your environment). The vacated grid card
becomes a placeholder whose own button reattaches it; closing the detached
window does the same.</p>
<div data-wmap-demo="gallery" class="wmap-demo"></div><hr>
<h2 id="4-interacting-with-dies">4. Interacting with dies</h2>
<h3 id="41-hover">4.1 Hover</h3>
<p>Hovering over a die shows a compact tooltip. It always includes the die grid
coordinates (x, y), and a retest count if the die was probed more than once.
The rest depends on the active plot mode:</p>
<ul>
<li><strong>Bin modes</strong> \u2014 the die&#39;s bin verdict (number and name, if named), plus a
note of how many test values are recorded for the die</li>
<li><strong>Test Value mode</strong> \u2014 the active test&#39;s value in bold, flagged when it is
out of spec, with the remaining tests summarised as &quot;+N more tests&quot;</li>
<li><strong>Stacked modes</strong> \u2014 the single aggregated value or count at that position</li>
</ul>
<h3 id="42-zoom-and-pan">4.2 Zoom and pan</h3>
<p>Scroll to zoom in and out. Click and drag to pan when in Pan mode. The toolbar
also provides dedicated <strong>Zoom mode</strong> (drag to draw a zoom region), <strong>Zoom in</strong>,
<strong>Zoom out</strong>, and <strong>Reset zoom</strong> buttons. Tooltips and die selection remain
accurate at all zoom levels.</p>
<h3 id="43-box-select">4.3 Box select</h3>
<p>Switch to Box select mode in the toolbar, then click and drag to draw a selection
rectangle. The application may display statistics or details for the selected
dies. This is useful for comparing a sub-region against the full wafer.
Use <strong>Ctrl / Cmd + click</strong> to add individual dies to the current selection.
Press <strong>Esc</strong> to clear.</p>
<div data-wmap-demo="box-select" class="wmap-demo"></div><p><em>A block of dies near the centre is shown pre-selected. Choose Box select in the
toolbar and drag to make your own selection, or Ctrl/Cmd + click individual dies.</em></p>
<hr>
<h2 id="5-findings-panel">5. Findings panel</h2>
<p>When spatial analysis has been run, the <strong>Findings</strong> panel lists statistically
detected patterns on the wafer. Open it from the toolbar.</p>
<p>Each finding shows:</p>
<ul>
<li><strong>Severity</strong> \u2014 Unusual, Notable, or Info (ordered most to least significant)</li>
<li><strong>Description</strong> \u2014 plain-language summary of what was detected and where</li>
<li><strong>Click to highlight</strong> \u2014 clicking a finding highlights the affected dies on
the map with a black-and-white outline, visible against every colour scheme</li>
</ul>
<p><strong>Severity</strong> reflects how strong the statistical evidence is. <em>Unusual</em> findings
have both a very low adjusted p-value and a large effect size \u2014 they are reliably
important. <em>Notable</em> findings are statistically significant with a meaningful
effect but not as extreme. <em>Info</em> findings pass the significance threshold at
lower strength and are worth reviewing but may reflect smaller or noisier patterns.</p>
<div data-wmap-demo="findings" class="wmap-demo"></div><p><em>Findings panel open showing a detected edge-ring pattern. Click any row to
highlight the affected dies on the map.</em></p>
<h3 id="finding-types">Finding types</h3>
<table>
<thead>
<tr>
<th>Type</th>
<th>What it indicates</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Ring</strong></td>
<td>Yield or value difference between radial bands \u2014 e.g. centre vs edge gradient</td>
</tr>
<tr>
<td><strong>Quadrant</strong></td>
<td>Yield or value difference between N, S, E, or W quadrants</td>
</tr>
<tr>
<td><strong>Sector</strong></td>
<td>Asymmetry across finer angular slices \u2014 rotational bias or directional process variation</td>
</tr>
<tr>
<td><strong>Test-site</strong></td>
<td>Yield or value difference between parallel probe sites on the same wafer</td>
</tr>
<tr>
<td><strong>Reticle position</strong></td>
<td>Yield signature repeating at specific stepper field grid positions</td>
</tr>
<tr>
<td><strong>Cluster</strong></td>
<td>Contiguous group of failing dies denser than the background failure rate</td>
</tr>
<tr>
<td><strong>Edge arc</strong></td>
<td>Localised arc of failures near the wafer perimeter</td>
</tr>
<tr>
<td><strong>Spatial pattern</strong></td>
<td>Classification of an identified cluster shape \u2014 e.g. Donut, Scratch, Centre, Edge-localised, Random</td>
</tr>
</tbody></table>
<p>Which finding types are active depends on the application&#39;s analysis
configuration.</p>
<p>When a spatial pattern classification is detected alongside supporting regional
findings (ring, quadrant, sector), the panel groups them together \u2014 the pattern
classification is the primary finding and the regional findings provide
supporting detail.</p>
<hr>
<h2 id="6-findings-sidebar">6. Findings sidebar</h2>
<p>The Findings sidebar shows detected anomalies for the current wafer or lot,
always docked next to the map so a clicked finding can highlight the affected
dies right there. Open it from the toolbar. Severity, kind, and region filter
controls at the top of the sidebar narrow the list down.</p>
<div data-wmap-demo="summary-panel" class="wmap-demo"></div><p><em>The Findings sidebar open alongside a single wafer. Click any finding to
highlight the affected dies; use the filter controls to narrow by severity,
kind, or region.</em></p>
<p>Yield, bin breakdown, ring/quadrant regional yield, and per-test statistics \u2014
previously shown in this same panel \u2014 now live in the
<a href="#8-insights-tab" onclick="(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'8-insights-tab\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)">Insights tab</a>&#39;s Overview sub-tab instead, since that content
doesn&#39;t need the map on screen the way a finding&#39;s highlight does.</p>
<p>A <strong>Summary report</strong> button (when present) opens a printable full-detail
report in a new window or tab, still covering everything findings-adjacent \u2014
yield, bin breakdown, ring and quadrant statistics, per-test statistics, and
the findings list \u2014 and can be saved as a PDF from your browser&#39;s print
dialog.</p>
<h3 id="why-some-findings-name-two-bins">Why some findings name two bins</h3>
<p>A finding may read <strong>&quot;hard bin 3 and soft bin 3 (same dies)&quot;</strong>. That is one
group of dies counted in two bin spaces, not two separate groups added together.
Hard and soft bins are independent numbering systems, so this wording appears
only when the two happen to cover exactly the same dies \u2014 reporting it twice
would look like two independent problems.</p>
<p>For the same reason, when a single pass bin is configured you will see the
<strong>yield</strong> finding for a region but not a separate finding for the pass bin
itself: &quot;pass-bin occurrence is 22 points lower&quot; and &quot;yield is 22 points lower&quot;
are the same sentence.</p>
<p>Nothing is discarded \u2014 an application reading the findings programmatically
still receives every one of them.</p>
<p>For <strong>lot-level views</strong> (gallery), the sidebar shows lot-level findings by
default, with a <strong>Wafers</strong> tab listing every wafer that has its own per-wafer
findings \u2014 click a row to open that wafer.</p>
<hr>
<h2 id="7-lot-stack-maps">7. Lot-stack maps</h2>
<p>A lot-stack map combines multiple individual wafer results into a single
composite view. The display clearly identifies this: the number of wafers
included and the aggregation method in use are shown in the panel header
(for example, &quot;3 wafers \xB7 mean&quot;) so you know you are not viewing a single
wafer&#39;s data.</p>
<p>Individual die coordinates are preserved. For each die grid position, results
from all wafers are aggregated into a single value or bin count according to
the selected aggregation method.</p>
<h3 id="stacked-plot-modes">Stacked plot modes</h3>
<p>Switching to a stacked mode changes what each die&#39;s colour represents:</p>
<table>
<thead>
<tr>
<th>Mode</th>
<th>What the colour shows</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Stacked Hard Bins</strong></td>
<td>For each die position, the count of wafers on which that bin appeared \u2014 one card per bin category</td>
</tr>
<tr>
<td><strong>Stacked Soft Bins</strong></td>
<td>Same as above, for soft bin categories</td>
</tr>
<tr>
<td><strong>Stacked Test Values</strong></td>
<td>For each die position, an aggregate of the test measurement across all wafers</td>
</tr>
</tbody></table>
<h3 id="aggregation-method">Aggregation method</h3>
<p>In <strong>Stacked Test Values</strong> mode, use the <strong>Aggregation method</strong> toolbar button (\u03A3)
to choose how values from each wafer are combined at each die position:</p>
<table>
<thead>
<tr>
<th>Method</th>
<th>Result</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Mean</strong></td>
<td>Average value across all wafers</td>
</tr>
<tr>
<td><strong>Median</strong></td>
<td>Middle value \u2014 less sensitive to outliers than mean</td>
</tr>
<tr>
<td><strong>Std Dev</strong></td>
<td>Standard deviation \u2014 shows where values vary most across the lot</td>
</tr>
<tr>
<td><strong>Min</strong></td>
<td>Lowest value seen at that position</td>
</tr>
<tr>
<td><strong>Max</strong></td>
<td>Highest value seen at that position</td>
</tr>
<tr>
<td><strong>Count</strong></td>
<td>Number of wafers with data at that position</td>
</tr>
</tbody></table>
<h3 id="gallery-stacked-modes">Gallery stacked modes</h3>
<p>In a gallery, stacked modes are always available in the control bar. Switching to
a stacked mode shows one card per bin category or per test parameter, aggregated
across all wafers in the gallery.</p>
<div data-wmap-demo="lot-stack" class="wmap-demo"></div><p><em>Stacked Hard Bins mode: each die position is coloured by how many wafers had
bin 1 (Pass) or bin 2 (Fail) at that location.</em></p>
<hr>
<h2 id="8-insights-tab">8. Insights tab</h2>
<p>The <strong>Insights</strong> toolbar button (single map or gallery) swaps the wafer view
for a chart suite computed from the same die data \u2014 without leaving the
toolbar. Click it again to return to the map. Independent of the Findings
sidebar (Section 6) \u2014 the two toggle independently, and opening one never
hides the other&#39;s toolbar button, since Findings has nothing to highlight
against once the map is replaced.</p>
<p>Insights is organized into three sub-tabs:</p>
<ul>
<li><strong>Overview</strong> \u2014 a yield bar (labelled with the pass bins actually in use), a
hard/soft bin pareto, and ring/quadrant regional yield and per-test
min/mean/max/spec-yield statistics.</li>
<li><strong>Distributions</strong> \u2014 process capability (Cp/Cpk/Pp/Ppk for tests with both a
lower and upper spec limit; tests missing a spec still appear, normalized
onto their own range and sorted by variability), a test-value box plot, and
a value histogram. Clicking a capability box drives the box plot and
histogram onto that same test automatically.</li>
<li><strong>Correlation</strong> \u2014 a test-to-test correlation matrix and a die-level scatter
plot. Clicking a matrix cell drives the scatter plot onto that pair.</li>
</ul>
<p>In a gallery with more than one wafer, a <strong>Group by</strong> control appears whenever
wafer metadata (lot, product, test program, temperature, split, or a custom
field) actually varies across the loaded wafers \u2014 grouping pools or restricts
each panel differently depending on what makes sense for that chart type.
Histogram, correlation, and scatter also offer a <strong>Wafer</strong> picker to narrow
from &quot;all wafers pooled&quot; down to one wafer at a time. Clicking a yield bar or
box-plot row for one wafer opens that wafer&#39;s own map \u2014 a box-plot click opens
directly on the test you were looking at.</p>
<div data-wmap-demo="analysis" class="wmap-demo"></div><p><em>Insights tab open on a single wafer, Overview sub-tab: yield and bin pareto,
ring/quadrant yield, and per-test statistics \u2014 all computed from this wafer&#39;s
own dies. The Distributions sub-tab has process capability, a test-value box
plot and histogram; Correlation has a correlation matrix with scatter plot.
In a gallery, Overview also gains a &quot;Group by&quot; control and per-wafer
yield/box-plot rows.</em></p>
<p><em>Gallery Insights, Overview sub-tab: lot-wide yield by wafer (click a bar to
open that wafer&#39;s map), hard/soft bin pareto, ring and quadrant yield, and
pooled per-test statistics. The &quot;\u2039 Gallery&quot; tab returns to the card grid.</em></p>
<p><em>Distributions sub-tab: process capability (coloured by Ppk \u2014 green capable,
orange marginal, red poor; tests without spec limits are muted and dashed), a
per-wafer test-value box plot, and a value histogram. Clicking a capability
box drives the box plot and histogram onto that test.</em></p>
<p><em>Correlation sub-tab: test-to-test Pearson correlation matrix (blue =
positive, orange = negative; intensity = strength) and a die-level scatter
plot coloured by hard bin. Clicking a matrix cell drives the scatter plot
onto that pair.</em></p>
<hr>
<h2 id="9-reticle-overlay">9. Reticle overlay</h2>
<p>When reticle (stepper field) geometry is configured, the <strong>Reticle grid</strong> overlay
draws the stepper field boundaries on the wafer. Each rectangle represents one
exposure field from the lithography stepper \u2014 the group of dies exposed in a
single step. This lets you correlate failure patterns with specific reticle
positions \u2014 useful for identifying stepper field signatures, alignment drift, or
mask defects.</p>
<div data-wmap-demo="reticle" class="wmap-demo"></div><p>Reticle-position findings in the Findings panel highlight the specific field
positions that show elevated failure rates. Hovering any die also shows its
<strong>Reticle (column, row)</strong> position \u2014 its location within its own stepper
field \u2014 just below the die&#39;s coordinate in the tooltip.</p>
<script>// Inline demo script for the embedded user guide window.
// Reads the library API from window.__wmapDemoApi at call time (not at script
// execution time) \u2014 the API is set by the caller before invoking populateGuideDemos.
// To add a new demo: add a handler below and a <div data-wmap-demo="id"> in user-guide.md.
(function () {
  function makeDemoWafer(radius) {
    radius = radius || 7;
    var out = [];
    for (var x = -radius; x <= radius; x++) {
      for (var y = -radius; y <= radius; y++) {
        if (Math.sqrt(x * x + y * y) > radius + 0.5) continue;
        out.push({
          x: x, y: y,
          hbin: (Math.abs(x * 3 + y * 7) % 10 < 2) ? 2 : 1,
          testValues: { 1: +((x * 0.5 + y * 0.3 + 5).toFixed(3)) },
        });
      }
    }
    return out;
  }

  // Wafer with edge-ring failures \u2014 dies near perimeter are bin 2, interior pass.
  function makeEdgeFailWafer(radius) {
    radius = radius || 7;
    var out = [];
    for (var x = -radius; x <= radius; x++) {
      for (var y = -radius; y <= radius; y++) {
        var dist = Math.sqrt(x * x + y * y);
        if (dist > radius + 0.5) continue;
        out.push({ x: x, y: y, hbin: dist > radius - 1.8 ? 2 : 1 });
      }
    }
    return out;
  }

  function populateGuideDemos(root) {
    /** @type {import('../dist/index.js')} */
    var api = window.__wmapDemoApi;
    if (!api) return;
    var buildWaferMap = api.buildWaferMap;
    var renderWaferMap = api.renderWaferMap;
    var renderWaferGallery = api.renderWaferGallery;
    var analyzeWaferMap = api.analyzeWaferMap;

    var demos = root.querySelectorAll('[data-wmap-demo]');
    if (!demos.length) return;

    var results = makeDemoWafer();
    var hbinDefs = [{ bin: 1, name: 'Pass' }, { bin: 2, name: 'Fail' }];
    var testDefs = [{ testNumber: 1, name: 'Test A', unit: 'V', limitLow: 1.5, limitHigh: 8.5 }];

    var binResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, passBins: [1], waferConfig: { notch: { type: 'right' } }, });
    var valueResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } }, });

    // Every renderWaferMap/renderWaferGallery call below returns a controller
    // with its own ResizeObserver + matchMedia listeners. Collect every handle
    // so the caller (toolbar.ts's guide close paths) can destroy() them all \u2014
    // otherwise they leak for the lifetime of the host page whenever the guide
    // is shown as an in-page overlay rather than a real popup (the popup path
    // masks the leak by tearing down its own window/realm on close).
    var handles = [];

    for (var i = 0; i < demos.length; i++) {
      var el = demos[i];
      var id = el.dataset.wmapDemo;
      try {
        if (id === 'value-heatmap') {
          handles.push(renderWaferMap(el, valueResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'value', activeTest: 1 }
          }));

        } else if (id === 'spec-passfail') {
          handles.push(renderWaferMap(el, valueResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'value', activeTest: 1, passFailDisplay: 'spec' }
          }));

        } else if (id === 'bin-highlight') {
          // Show bin 2 highlighted (dimmed all others) so the feature is visible without interaction.
          handles.push(renderWaferMap(el, binResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'hardBin', highlightBin: 2 }
          }));

        } else if (id === 'bin-map') {
          // basic hardbin map with no toolbar, just the wafer display.
          handles.push(renderWaferMap(el, binResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'hardBin', showXYIndicator: true }
          }));

        } else if (id === 'orientation') {
          // Show the wafer rotated 90\xB0 so the notch is clearly on the left side,
          // illustrating that the display orientation can be adjusted.

          handles.push(renderWaferMap(el, binResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'hardBin', rotation: 90, showXYIndicator: true }
          }));

        } else if (id === 'overlays') {
          // Show ring boundaries, quadrant lines, and XY indicator all active.
          handles.push(renderWaferMap(el, binResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: {
              plotMode: 'hardBin',
              showRingBoundaries: true,
              showQuadrantBoundaries: true,
              showXYIndicator: true,
            }
          }));

        } else if (id === 'gallery') {
          if (!renderWaferGallery) {
            // Expected, not a bug: a guide opened from a single-wafer host
            // (renderWaferMap.ts's openGuideWindow) deliberately omits
            // renderWaferGallery to avoid a circular import between the two
            // render entry points \u2014 see its own doc comment. Skip this one
            // demo rather than falling into the catch below and logging a
            // scary "failed" warning for an intentional gap.
            continue;
          }
          var items = [0, 1, 2, 3].map(function (n) {
            var r = buildWaferMap({ results: makeDemoWafer(6 + n), hbinDefs: hbinDefs, passBins: [1] });
            return Object.assign({}, r, { label: 'Wafer ' + (n + 1) });
          });
          handles.push(renderWaferGallery(el, items));

        } else if (id === 'findings') {
          // Build a wafer with a strong edge-ring failure pattern so findings are guaranteed.
          var edgeResults = makeEdgeFailWafer(7);
          var edgeResult = buildWaferMap({ results: edgeResults, hbinDefs: hbinDefs, passBins: [1] });
          var summary = analyzeWaferMap ? analyzeWaferMap(edgeResult) : null;
          handles.push(renderWaferMap(el, edgeResult, {
            showToolbar: true, showTooltip: true,
            viewOptions: { plotMode: 'hardBin' },
            statsSummary: summary || undefined,
            findings: summary ? { defaultOpen: true } : undefined,
          }));

        } else if (id === 'lot-stack') {
          // Count how many wafers (out of 3) each die failed (bin 2) \u2014 shown as a heatmap.
          function makeLotWafer(seed) {
            var r = 7, out = [];
            for (var x = -r; x <= r; x++) {
              for (var y = -r; y <= r; y++) {
                if (Math.sqrt(x * x + y * y) > r + 0.5) continue;
                out.push({ x: x, y: y, hbin: (Math.abs(x * seed + y * (seed + 4)) % 10 < 2) ? 2 : 1 });
              }
            }
            return out;
          }
          var stackResult = buildWaferMap({
            lotStack: { results: [makeLotWafer(3), makeLotWafer(7), makeLotWafer(11)], method: 'countBin', targetBin: 2 },
            hbinDefs: hbinDefs,
            passBins: [1],
          });
          handles.push(renderWaferMap(el, stackResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'stackedBins' }
          }));

        } else if (id === 'box-select') {
          // Box-select is interactive \u2014 render WITH the toolbar so the box-select
          // tool is reachable, and pre-select a cluster of dies so the user sees
          // what a selection looks like before dragging their own.
          var bsResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } } });
          var bsCtrl = renderWaferMap(el, bsResult, {
            showTooltip: true,
            viewOptions: { plotMode: 'hardBin' },
            onSelect: function () { /* host app would show selection stats here */ },
          });
          handles.push(bsCtrl);
          // Highlight a 3\xD73 block near the centre as an illustrative initial selection.
          var preSel = bsResult.dies.filter(function (d) {
            return d.x >= -1 && d.x <= 1 && d.y >= -1 && d.y <= 1;
          });
          if (bsCtrl && bsCtrl.setSelection) bsCtrl.setSelection(preSel);

        } else if (id === 'summary-panel') {
          // Full summary panel, opened by default, on a wafer with bins + test
          // values so yield, bin breakdown, and per-test stats are all populated.
          var spResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } } });
          // computePerTestStats: true adds the cheap per-test value summary to the
          // panel without the heavier regional test-value findings pass.
          var spSummary = analyzeWaferMap ? analyzeWaferMap(spResult, { computePerTestStats: true }) : null;
          handles.push(renderWaferMap(el, spResult, {
            showTooltip: true,
            viewOptions: { plotMode: 'hardBin' },
            statsSummary: spSummary || undefined,
            summaryPanel: { defaultOpen: true },
          }));

        } else if (id === 'analysis') {
          // renderWaferGallery is NOT necessarily available here \u2014 a guide
          // window opened from a single-map host (renderWaferMap.ts) passes
          // renderWaferGallery: undefined to avoid a circular import, so this
          // demo (unlike 'gallery' above) must use renderWaferMap, which is
          // always present regardless of which host opened the guide.
          //
          // Two parametric tests (one with spec limits, so capability has
          // something to plot) so distributions/capability/correlation/
          // scatter all have real data to show, alongside yield/bin pareto.
          var analysisTestDefs = [
            { testNumber: 1, name: 'Idsat', unit: 'A', limitLow: 1.5, limitHigh: 8.5 },
            { testNumber: 2, name: 'Vth', unit: 'V' },
          ];
          function makeAnalysisWafer(seed) {
            var r = 7, out = [];
            for (var x = -r; x <= r; x++) {
              for (var y = -r; y <= r; y++) {
                if (Math.sqrt(x * x + y * y) > r + 0.5) continue;
                out.push({
                  x: x, y: y,
                  hbin: (Math.abs(x * 3 + y * 7 + seed) % 10 < 2) ? 2 : 1,
                  testValues: {
                    1: +((x * 0.5 + y * 0.3 + 5 + seed * 0.2).toFixed(3)),
                    2: +((x * -0.2 + y * 0.4 + 2 + seed * 0.1).toFixed(3)),
                  },
                });
              }
            }
            return out;
          }
          var analysisResult = buildWaferMap({ results: makeAnalysisWafer(0), hbinDefs: hbinDefs, testDefs: analysisTestDefs, passBins: [1] });
          handles.push(renderWaferMap(el, analysisResult, {
            insights: { enabled: true },
            viewOptions: { plotMode: 'hardBin' },
          }));
          // Open the Insights tab by default \u2014 same click a user would make,
          // just pre-triggered so the feature is visible without interaction.
          var analysisBtn = el.querySelector('button[aria-label="Insights"]');
          if (analysisBtn) analysisBtn.click();

        } else if (id === 'reticle') {
          var reticleResult = buildWaferMap({
            results: results, hbinDefs: hbinDefs, passBins: [1],
            reticleConfig: { width: 3, height: 2, anchorDie: { x: -1, y: 0 } },
          });
          handles.push(renderWaferMap(el, reticleResult, {
            showToolbar: false, showTooltip: true,
            viewOptions: { plotMode: 'hardBin', showReticle: true }
          }));
        }
      } catch (e) {
        console.warn('wmap guide demo failed:', id, e);
      }
    }

    // Exposed so the guide's close paths (toolbar.ts openGuideInFloatingWindow/
    // openGuideInPopup) can tear every demo down \u2014 see the \`handles\` comment
    // above. Guarded by identity (like __wmapDemoApi's restoreApi below) so a
    // stale/delayed close (e.g. the popup-closed poll firing after a rapid
    // reopen already overwrote this) can't destroy a newer instance's demos.
    var destroyer = function () {
      if (window.__wmapDestroyGuideDemos === destroyer) window.__wmapDestroyGuideDemos = null;
      for (var j = 0; j < handles.length; j++) {
        try { handles[j] && handles[j].destroy && handles[j].destroy(); } catch (e) { /* best-effort teardown */ }
      }
      handles = [];
    };
    window.__wmapDestroyGuideDemos = destroyer;
  }

  // Expose for callers \u2014 __wmapDemoApi must be set before calling:
  // - Guide window (toolbar.ts openUserGuideWindow): sets __wmapDemoApi then calls __wmapPopulateGuideDemos(guideEl)
  // - Docs site (guide-demos-init.js): sets __wmapDemoApi then calls __wmapPopulateGuideDemos(document)
  window.__wmapPopulateGuideDemos = populateGuideDemos;
})();
<\/script></div>`;export{e as USER_GUIDE_HTML};
