@wafertools/wafermap 0.25.0 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -1
- package/dist/packages/canvas-adapter/dieList.d.ts +17 -0
- package/dist/packages/canvas-adapter/dieList.js +7 -7
- package/dist/packages/canvas-adapter/icons.js +1 -1
- package/dist/packages/canvas-adapter/index.d.ts +4 -0
- package/dist/packages/canvas-adapter/index.js +1 -1
- package/dist/packages/canvas-adapter/renderWaferGallery.js +2 -2
- package/dist/packages/canvas-adapter/summaryPanel.js +3 -3
- package/dist/packages/canvas-adapter/toolbar.d.ts +55 -0
- package/dist/packages/canvas-adapter/toolbar.js +2 -2
- package/dist/packages/canvas-adapter/userGuideHtml.d.ts +1 -1
- package/dist/packages/canvas-adapter/userGuideHtml.js +42 -4
- package/dist/packages/canvas-adapter/version.d.ts +2 -2
- package/dist/packages/canvas-adapter/version.js +1 -1
- package/dist/packages/renderer/buildView.js +1 -1
- package/dist/packages/renderer/buildWaferMap.d.ts +5 -1
- package/dist/packages/renderer/buildWaferMap.js +1 -1
- package/dist/packages/stats/analyzeWaferLot.js +1 -1
- package/dist/packages/stats/reportHtml.d.ts +6 -4
- package/dist/packages/stats/types.d.ts +14 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const USER_GUIDE_HTML = "<div class=\"wmap-guide\">\n<style>\n.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}\n.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)}\n.wmap-guide-version{font-size:11px;font-weight:400;color:var(--wmap-text-muted,#888);white-space:nowrap}\n.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)}\n.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}\n.wmap-guide h3 img{width:20px;height:20px;display:inline;vertical-align:middle;border:none;border-radius:0;margin:0}\n.wmap-guide p{margin:0 0 12px}\n.wmap-guide ul,.wmap-guide ol{margin:0 0 12px;padding-left:22px}\n.wmap-guide li{margin-bottom:4px}\n.wmap-guide table{border-collapse:collapse;width:100%;margin:0 0 16px;font-size:13px}\n.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)}\n.wmap-guide td{padding:6px 10px;border:1px solid var(--wmap-border,#e2e5ea);vertical-align:middle}\n.wmap-guide tr:nth-child(even) td{background:var(--wmap-bg-hover,#fafbfc)}\n.wmap-guide strong{font-weight:600}\n.wmap-guide code{font-family:monospace;font-size:12px;background:var(--wmap-bg-active,#f0f2f5);padding:1px 4px;border-radius:3px}\n.wmap-guide hr{border:none;border-top:1px solid var(--wmap-border,#e9eaec);margin:24px 0}\n.wmap-guide img{max-width:100%;height:auto;border:1px solid var(--wmap-border,#e2e5ea);border-radius:6px;margin:8px 0;display:block}\n.wmap-guide td img{width:20px;height:20px;max-width:none;display:inline-block;vertical-align:middle;border:none;border-radius:0;margin:0}\n.wmap-guide a{color:var(--wmap-icon-active,#0066cc);text-decoration:none}\n.wmap-guide a:hover{text-decoration:underline}\n.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)}\n.wmap-guide-online-link a{color:var(--wmap-icon-active,#0066cc)}\n.wmap-demo{width:100%;height:220px;margin:12px 0;border:1px solid #e2e5ea;border-radius:6px;overflow:hidden;background:#f8f9fa}\n.wmap-demo[data-wmap-demo=\"gallery\"]{height:380px}\n.wmap-demo[data-wmap-demo=\"findings\"]{height:280px}\n.wmap-demo[data-wmap-demo=\"summary-panel\"]{height:300px}\n.wmap-demo[data-wmap-demo=\"box-select\"]{height:280px}\n.wmap-demo[data-wmap-demo=\"analysis\"]{height:600px}\n.wmap-guide--max{max-width:1000px}\n@media print{\n /* Print only the guide's own content, never the host page, and never a\n clipped single screenful. The guide window opens one of two ways\n (toolbar.ts's openUserGuideWindow) and this must handle both:\n - a real popup (openGuideInPopup): buildGuideContent's content div\n (class wmap-guide-content) is body's ONLY child directly \u2014 body\n itself is height:100vh;overflow:hidden for the screen layout, which\n without an override clips print to a single blank-looking page.\n - the in-page floating-window fallback (openGuideInFloatingWindow,\n used whenever window.open() is blocked \u2014 e.g. always in Tauri):\n the same content div sits inside .wmap-window-box, itself a sibling\n of the rest of the host page's own content, which must stay hidden.\n Both need: undo the screen-only height/overflow clipping (100vh/\n overflow:hidden bodies, flex:1/overflow:auto content panes) so the\n guide can paginate over multiple printed pages instead of clipping to\n one, hide anything that isn't the guide itself, and drop the\n print-irrelevant \"view online\" banner. */\n body{overflow:visible!important;height:auto!important}\n /* Hide everything except the guide's own content div (covers the real-\n popup case, where content is body's only child) and .wmap-window-box\n (covers the floating-window case, where content is nested inside it \u2014\n that subtree gets its own unclip rules below rather than being hidden\n here). */\n body > *:not(.wmap-guide-content):not(.wmap-window-box){display:none!important}\n .wmap-guide-content{flex:none!important;overflow:visible!important;height:auto!important;min-height:0!important}\n 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}\n .wmap-window-box > div:first-child{display:none!important}\n /* contentWrap (flex container) and the scroll wrapper inside it both clip/scroll;\n unclip them so the full guide paginates instead of one screenful printing. */\n .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}\n .wmap-guide,.wmap-guide--max{max-width:none!important;height:auto!important;overflow:visible!important;padding:0!important}\n .wmap-guide-online-link{display:none!important}\n}\n</style>\n<h1 id=\"wafer-map-user-guide\">Wafer Map \u2014 User Guide<span class=\"wmap-guide-version\" title=\"Built 2026-08-25T20:38:01.723Z\">v0.25.0</span></h1>\n<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>\n<p>This guide describes the display and analysis features of the wafer map viewer.\nIt is written for users who may be semiconductor test engineers, device engineers, and yield engineers\nor anyone else who may use a wafer map application \u2014 not for developers integrating the wafermap library.</p>\n<p>Some features depend on what data the application has loaded (bin names, test\ndefinitions, spec limits, reticle geometry). Where this applies it is noted.</p>\n<p><strong>Getting oriented.</strong> The wafer map is an interactive viewer. A toolbar is always\npresent at the top-right of the map \u2014 use it to change what the colours represent,\ntoggle overlays, rotate or flip the wafer, zoom, select dies, and open the summary\npanel. Hover any die for a tooltip; the panels and tooltips always report the\noriginal die grid coordinates, never the on-screen position after a rotate or flip.</p>\n<hr>\n<h2 id=\"1-reading-the-map\">1. Reading the map</h2>\n<h3 id=\"11-die-grid-and-coordinates\">1.1 Die grid and coordinates</h3>\n<p>Each square on the wafer represents one die. The position labels you see \u2014 in\ntooltips, axis ticks, and selection readouts \u2014 are <strong>die grid coordinates</strong>: usually the\nX and Y step indices from the prober (integers such as \u22127, 0, 5). They are not\nmillimetre values.</p>\n<p>These coordinates are always the original grid values. Rotating or flipping the\ndisplay does not change the coordinate labels \u2014 a die at (3, \u22122) always reads\n(3, \u22122) regardless of how the wafer is oriented on screen.</p>\n<h3 id=\"12-wafer-orientation\">1.2 Wafer orientation</h3>\n<p>The notch (shown as a V-notch or flat edge) marks the physical reference edge of\nthe wafer as configured. Use the <strong>Orientation</strong> toolbar controls to rotate or flip\nthe display to match your convention; die coordinates are unaffected.</p>\n<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\u00B0. The notch has moved, but die coordinates \u2014 shown in tooltips \u2014 remain their original grid/prober values.</em></p>\n<div data-wmap-demo=\"orientation\" class=\"wmap-demo\"></div><h3 id=\"13-die-appearance\">1.3 Die appearance</h3>\n<table>\n<thead>\n<tr>\n<th>Appearance</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Solid colour</td>\n<td>Active plot value \u2014 bin category or test measurement</td>\n</tr>\n<tr>\n<td>Muted grey at perimeter</td>\n<td>Partial die \u2014 falls outside the wafer circle boundary</td>\n</tr>\n<tr>\n<td>Neutral grey (interior)</td>\n<td>No data \u2014 die has no bin or test result in the loaded dataset</td>\n</tr>\n<tr>\n<td>Dimmed fill (interior)</td>\n<td>Edge-excluded die \u2014 falls within the edge exclusion band configured for this wafer</td>\n</tr>\n</tbody></table>\n<p>No-data grey and partial-die grey are visually distinct. A no-data die is not a\nfail; it simply has no result recorded. Edge-excluded dies are shown dimmed and are\nnot counted in yield calculations.</p>\n<h3 id=\"14-legend-and-colorbar\">1.4 Legend and colorbar</h3>\n<p><strong>Bin modes</strong> show a discrete colour legend: one swatch per bin, with bin number\nand name if the application has supplied bin names.</p>\n<p><strong>Value mode</strong> shows a continuous colorbar: the colour scale runs from the minimum\nto maximum value, with units when available. The colorbar is informational only \u2014\nclicking it has no effect. To switch to a pass/fail view, use the <strong>Spec pass/fail</strong>\nor <strong>Test pass/fail</strong> option in the Overlays menu (available when spec limits are\ndefined, or a recorded verdict exists, for the active test).</p>\n<p><strong>Spec pass/fail mode</strong> replaces the colorbar with a small <strong>spec legend</strong>: Pass,\nFail high, and Fail low swatches (only the categories that apply to the test's\nlimits) with a die count beside each. This judges dies against the test's spec\nlimits (<code>limitLow</code> / <code>limitHigh</code>).</p>\n<p><strong>Test pass/fail mode</strong> replaces the colorbar with a <strong>Pass / Fail legend</strong> and die\ncounts, coloured by the tester's own <strong>recorded</strong> verdict for that test \u2014 not a\nspec-limit judgement. A test with no measured value (a functional, go/no-go test)\nalways displays this way; selecting it switches the map into Test pass/fail\nautomatically, since there is nothing to plot on a gradient.</p>\n<p>Every map also shows a short <strong>title</strong> by the colorbar or legend naming what is\ndisplayed \u2014 the test name (and number, in spec mode), the bin type, or the stacked\nwafer count.</p>\n<p>Clicking a bin swatch in the legend filters the display to that bin\n(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>\n<hr>\n<h2 id=\"2-plot-modes\">2. Plot modes</h2>\n<p>The active plot mode determines what the colour of each die represents. Use the\n<strong>Plot mode</strong> toolbar dropdown to switch. Available modes depend on what data the\napplication has loaded.</p>\n<table>\n<thead>\n<tr>\n<th>Mode</th>\n<th>Colour represents</th>\n<th>Typical use</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Hard Bin</strong></td>\n<td>Physical sort result (hard bin number)</td>\n<td>Yield categorisation, pass/fail map</td>\n</tr>\n<tr>\n<td><strong>Soft Bin</strong></td>\n<td>Test-program failure category (soft bin number)</td>\n<td>Failure mode breakdown</td>\n</tr>\n<tr>\n<td><strong>Test Value</strong></td>\n<td>A single numeric measurement</td>\n<td>Parametric heatmap \u2014 leakage, Idsat, Vth, etc.</td>\n</tr>\n<tr>\n<td><strong>Stacked Hard Bins</strong></td>\n<td>Hard bin occurrence counts aggregated across multiple wafers</td>\n<td>Lot-level yield patterns</td>\n</tr>\n<tr>\n<td><strong>Stacked Soft Bins</strong></td>\n<td>Soft bin occurrence counts aggregated across multiple wafers</td>\n<td>Lot-level failure mode patterns</td>\n</tr>\n<tr>\n<td><strong>Stacked Test Values</strong></td>\n<td>Aggregated test values across multiple wafers</td>\n<td>Lot-level parametric trends</td>\n</tr>\n</tbody></table>\n<p>Stacked modes are only available on lot-stack maps (multiple wafers combined into\none display). The panel identifies how many wafers were stacked and which\naggregation method is active.</p>\n<h3 id=\"test-value-mode-colorbar-range-and-spec-limits\">Test Value mode \u2014 colorbar range and spec limits</h3>\n<p>When spec limits are defined for the active test, two additional display options\nbecome available:</p>\n<ul>\n<li><strong>Colorbar range \u2014 Data / Spec</strong>: switches the colorbar scale between the\nactual data extent and the spec limit bounds. This affects only the colorbar's\nrange, never how out-of-spec dies are shown. In <strong>both</strong> ranges every die is\ncoloured by the gradient so you can read the value distribution, and out-of-spec\ndies are marked with a triangle \u2014 pointing <strong>down (\u25BD) for below LSL</strong>, <strong>up (\u25B3)\nfor above USL</strong> \u2014 so they stand out without leaving the distribution. The\ntriangle is drawn black or white per die for contrast against its own colour, so\nit stays visible under any colour scheme, and its shape (not colour) carries the\nbelow/above-limit meaning.</li>\n<li><strong>Spec pass/fail</strong>: when active, dies within spec are shown in a pass colour\nand dies outside spec are highlighted \u2014 <strong>blue for below the Lower Spec Limit\n(LSL)</strong>, <strong>red for above the Upper Spec Limit (USL)</strong>. Both flags apply\nindependently; a die can be flagged on either or both limits. A spec legend\nreplaces the colorbar, listing each applicable category with its die count.</li>\n</ul>\n<p>Some tests have no measured value at all \u2014 a continuity check or any other\ngo/no-go test, where the only result is a recorded pass or fail. Selecting one\nof these <strong>functional tests</strong> as the active test switches the map into\n<strong>Test pass/fail</strong> automatically: a Pass/Fail legend by die count, coloured by\nthe tester's own recorded verdict rather than a spec-limit judgement (there is\nno gradient to fall back to). <strong>Test pass/fail</strong> is also available as an\nOverlays option on an ordinary parametric test when it carries recorded\nverdicts, as an alternative to spec-limit judgement.</p>\n<div data-wmap-demo=\"value-heatmap\" class=\"wmap-demo\"></div><div data-wmap-demo=\"spec-passfail\" class=\"wmap-demo\"></div><hr>\n<h2 id=\"3-toolbar-controls\">3. Toolbar controls</h2>\n<p>The toolbar sits at the top-right of the map and is always visible. Controls that\nare not applicable to the current mode are hidden automatically. (Hovering the map\nshows die tooltips \u2014 a separate thing from the toolbar, which is always present.)</p>\n<p><img src=\"data:image/png;base64,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\" alt=\"Single-map toolbar\"></p>\n<h3 id=\"single-map\">Single map</h3>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Control</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjciIHJ4PSI5IiByeT0iNCIgLz4KICAKICA8ZyBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS40IiBvcGFjaXR5PSIwLjg1Ij4KICAgIDxsaW5lIHgxPSI0IiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyIgLz4KICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMuNSIgeDI9IjEyIiB5Mj0iMTAuNSIgLz4KICA8L2c+CiAgCiAgPHBhdGggZD0iTTMgMTIgYzAgMi41IDQgNCA5IDQgczktMS41IDktNCIgLz4KICAKICA8cGF0aCBkPSJNMyAxNyBjMCAyLjUgNCA0IDkgNCBzOS0xLjUgOS00IiAvPgo8L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Plot mode</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDEyczMuNi03IDEwLTcgMTAgNyAxMCA3LTMuNiA3LTEwIDctMTAtNy0xMC03eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Overlays</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIi8+PHBhdGggZD0iTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoiLz48cGF0aCBkPSJNOSA4Yy0xLjgwNCAyLjcxLTMuOTcgMy40Ni02LjU4MyAzLjk0OGEuNTA3LjUwNyAwIDAgMC0uMzAyLjgxOWw3LjMyIDguODgzYTEgMSAwIDAgMCAxLjE4NS4yMDRDMTIuNzM1IDIwLjQwNSAxNiAxNi43OTIgMTYgMTUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Colour scheme</td>\n<td>Switches the colour palette used for value and stacked modes. Available schemes depend on what the application has registered.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDIxIEw1IDMiLz48cGF0aCBkPSJNMy41IDUgTDUgMyBMNi41IDUiLz48cGF0aCBkPSJNNSAyMSBMMjEgMjEiLz48cGF0aCBkPSJNMTkgMTkuNSBMMjEgMjEgTDE5IDIyLjUiLz48cGF0aCBkPSJNNiAyMCBDIDYgMTIsIDEwIDcsIDIwIDYiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Log scale</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDQgTDUgMjAiLz48cGF0aCBkPSJNNSA0IEw4IDQiLz48cGF0aCBkPSJNNSAyMCBMOCAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxOSAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxNiA0Ii8+PHBhdGggZD0iTTE5IDIwIEwxNiAyMCIvPjxwYXRoIGQ9Ik01IDEyIEwxOSAxMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Colorbar range</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjciIHg9IjMiIHk9IjMiIHJ4PSIxIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMyIgeT0iMTQiIHJ4PSIxIi8+PHBhdGggZD0iTTE0IDRoNyIvPjxwYXRoIGQ9Ik0xNCA5aDciLz48cGF0aCBkPSJNMTQgMTVoNyIvPjxwYXRoIGQ9Ik0xNCAyMGg3Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Legend style</td>\n<td>Bin modes only. Controls where the bin legend is positioned relative to the map: Default (right), Compact, Left, Top, Bottom, or Floating.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlnb24gcG9pbnRzPSIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzYiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Orientation</td>\n<td>Menu of display transforms: <strong>Rotate 90\u00B0 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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xMyAxMy41IDItMi41LTItMi41Ii8+PHBhdGggZD0ibTIxIDIxLTQuMy00LjMiLz48cGF0aCBkPSJNOSA4LjUgNyAxMWwyIDIuNSIvPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Zoom mode</td>\n<td>Click and drag to draw a zoom region.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iMTEiIHgyPSIxMSIgeTE9IjgiIHkyPSIxNCIvPjxsaW5lIHgxPSI4IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjExIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Zoom in</td>\n<td>Zooms in one step.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Zoom out</td>\n<td>Zooms out one step.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIvPjxwYXRoIGQ9Ik0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Reset zoom</td>\n<td>Returns the map to the default fitted view.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMiAydjIwIi8+PHBhdGggZD0ibTE1IDE5LTMgMy0zLTMiLz48cGF0aCBkPSJtMTkgOSAzIDMtMyAzIi8+PHBhdGggZD0iTTIgMTJoMjAiLz48cGF0aCBkPSJtNSA5LTMgMyAzIDMiLz48cGF0aCBkPSJtOSA1IDMtMyAzIDMiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Pan mode</td>\n<td>Click and drag to pan the map.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDNhMiAyIDAgMCAwLTIgMiIvPjxwYXRoIGQ9Ik0xOSAzYTIgMiAwIDAgMSAyIDIiLz48cGF0aCBkPSJNMjEgMTlhMiAyIDAgMCAxLTIgMiIvPjxwYXRoIGQ9Ik01IDIxYTIgMiAwIDAgMS0yLTIiLz48cGF0aCBkPSJNOSAzaDEiLz48cGF0aCBkPSJNOSAyMWgxIi8+PHBhdGggZD0iTTE0IDNoMSIvPjxwYXRoIGQ9Ik0xNCAyMWgxIi8+PHBhdGggZD0iTTMgOXYxIi8+PHBhdGggZD0iTTIxIDl2MSIvPjxwYXRoIGQ9Ik0zIDE0djEiLz48cGF0aCBkPSJNMjEgMTR2MSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Box select</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjkiLz48cGF0aCBkPSJNMTMgMTdWNSIvPjxwYXRoIGQ9Ik04IDE3di0zIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Insights</td>\n<td>Swaps the map for this wafer'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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNSAzaDZ2NiIvPjxwYXRoIGQ9Ik05IDIxSDN2LTYiLz48cGF0aCBkPSJNMjEgM2wtNyA3Ii8+PHBhdGggZD0iTTMgMjFsNy03Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Expand</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Save image</td>\n<td>Downloads the current map view as a PNG. Captures the canvas as displayed, including all active overlays and the legend.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNOCAydjQiLz48cGF0aCBkPSJNMTIgMnY0Ii8+PHBhdGggZD0iTTE2IDJ2NCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgeD0iNCIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMGg2Ii8+PHBhdGggZD0iTTggMTRoOCIvPjxwYXRoIGQ9Ik04IDE4aDUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Findings</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTAuMjkgMy44NiAxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6Ii8+PHBhdGggZD0iTTEyIDl2NCIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Data warnings</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>User guide</td>\n<td>Opens this guide.</td>\n</tr>\n</tbody></table>\n<p><strong>This guide's own window</strong> (and a gallery card detached into its own window,\nsee <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\nits header shows minimize, maximize, and close buttons, and it can be dragged\nand resized by its corner grip. Minimizing collapses it to a small title strip\nwithout closing it; click it again to restore.</p>\n<p><strong>Highlight bin</strong> \u2014 in bin modes, click any bin swatch in the legend to highlight\nthat bin and dim all others. Click again to clear. Useful for isolating a specific\nfailure category across the wafer.</p>\n<div data-wmap-demo=\"bin-highlight\" class=\"wmap-demo\"></div><p><em>Bin 2 (Fail) highlighted \u2014 all other bins are dimmed.</em></p>\n<h3 id=\"overlays\">Overlays</h3>\n<p>Use the <strong>Overlays</strong> menu to toggle optional display layers on and off:</p>\n<ul>\n<li><strong>XY axis indicator</strong> \u2014 shows X and Y axis lines through the wafer centre</li>\n<li><strong>Ring boundaries</strong> \u2014 concentric ring divisions that match the spatial analysis zones</li>\n<li><strong>Quadrant lines</strong> \u2014 divides the wafer into N, S, E, W quadrants</li>\n<li><strong>Die coordinate labels</strong> \u2014 draws the (x, y) grid position inside each die (useful at high zoom)</li>\n<li><strong>Reticle grid</strong> \u2014 stepper field grid (only shown when reticle geometry is configured)</li>\n<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>\n<li><strong>Test pass/fail</strong> \u2014 pass/fail colouring for Test Value mode, coloured by the tester's recorded verdict; always on for a functional (no measured value) active test</li>\n</ul>\n<div data-wmap-demo=\"overlays\" class=\"wmap-demo\"></div><p><em>Ring boundaries, quadrant lines, and XY indicator all active.</em></p>\n<h3 id=\"keyboard-shortcuts\">Keyboard shortcuts</h3>\n<table>\n<thead>\n<tr>\n<th>Key</th>\n<th>Action</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>E</strong></td>\n<td>Open the map in an enlarged modal overlay</td>\n</tr>\n<tr>\n<td><strong>F</strong></td>\n<td>Maximise / restore the modal (when expanded)</td>\n</tr>\n<tr>\n<td><strong>Esc</strong></td>\n<td>Close the expanded modal, or clear the die selection</td>\n</tr>\n<tr>\n<td><strong>Ctrl / Cmd + click</strong></td>\n<td>Add a die to the current selection</td>\n</tr>\n<tr>\n<td><strong>Mouse wheel / scroll</strong></td>\n<td>Zoom in and out at the cursor</td>\n</tr>\n<tr>\n<td><strong>Ctrl / Cmd + <code>+</code></strong> / <strong><code>-</code></strong></td>\n<td>Zoom in / zoom out</td>\n</tr>\n<tr>\n<td><strong>Ctrl / Cmd + <code>0</code></strong></td>\n<td>Reset zoom to the fitted view</td>\n</tr>\n<tr>\n<td><strong>Arrow keys</strong></td>\n<td>Pan the map</td>\n</tr>\n<tr>\n<td><strong>Space (hold) + drag</strong></td>\n<td>Temporarily pan without leaving the current tool</td>\n</tr>\n</tbody></table>\n<h3 id=\"gallery\">Gallery</h3>\n<p>The gallery control bar applies to all cards simultaneously.</p>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Control</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjciIHJ4PSI5IiByeT0iNCIgLz4KICAKICA8ZyBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS40IiBvcGFjaXR5PSIwLjg1Ij4KICAgIDxsaW5lIHgxPSI0IiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyIgLz4KICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMuNSIgeDI9IjEyIiB5Mj0iMTAuNSIgLz4KICA8L2c+CiAgCiAgPHBhdGggZD0iTTMgMTIgYzAgMi41IDQgNCA5IDQgczktMS41IDktNCIgLz4KICAKICA8cGF0aCBkPSJNMyAxNyBjMCAyLjUgNCA0IDkgNCBzOS0xLjUgOS00IiAvPgo8L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Plot mode</td>\n<td>Switches the plot mode for all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDEyczMuNi03IDEwLTcgMTAgNyAxMCA3LTMuNiA3LTEwIDctMTAtNy0xMC03eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Overlays</td>\n<td>Toggles display layers for all cards simultaneously.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIi8+PHBhdGggZD0iTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoiLz48cGF0aCBkPSJNOSA4Yy0xLjgwNCAyLjcxLTMuOTcgMy40Ni02LjU4MyAzLjk0OGEuNTA3LjUwNyAwIDAgMC0uMzAyLjgxOWw3LjMyIDguODgzYTEgMSAwIDAgMCAxLjE4NS4yMDRDMTIuNzM1IDIwLjQwNSAxNiAxNi43OTIgMTYgMTUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Colour scheme</td>\n<td>Switches the colour palette for all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlnb24gcG9pbnRzPSIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzYiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Orientation</td>\n<td>Opens the rotate/flip controls, applied to all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxyZWN0IHg9IjMiIHk9IjMiIHdpZHRoPSI0IiBoZWlnaHQ9IjE4IiByeD0iMSIvPgogIDxyZWN0IHg9IjEwIiB5PSIzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxOCIgcng9IjEiLz4KICA8cmVjdCB4PSIxNyIgeT0iMyIgd2lkdGg9IjQiIGhlaWdodD0iMTgiIHJ4PSIxIi8+Cjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Columns</td>\n<td>Sets the number of columns in the card grid.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PGNpcmNsZSBjeD0iNS41IiBjeT0iNC41IiByPSIwLjgiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjxjaXJjbGUgY3g9IjgiIGN5PSI0LjUiIHI9IjAuOCIgZmlsbD0iIzM3NDE1MSIgc3Ryb2tlPSJub25lIi8+PGNpcmNsZSBjeD0iNS41IiBjeT0iNyIgcj0iMC44IiBmaWxsPSIjMzc0MTUxIiBzdHJva2U9Im5vbmUiLz48Y2lyY2xlIGN4PSI4IiBjeT0iNyIgcj0iMC44IiBmaWxsPSIjMzc0MTUxIiBzdHJva2U9Im5vbmUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Save image</td>\n<td>Downloads the full gallery grid as a single PNG.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xOCA0SDZsNiA4LTYgOGgxMiIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Aggregation method</td>\n<td>Stacked modes only. Selects how values from multiple wafers are combined per die position: Mean, Median, Std Dev, Min, Max, or Count.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDIxIEw1IDMiLz48cGF0aCBkPSJNMy41IDUgTDUgMyBMNi41IDUiLz48cGF0aCBkPSJNNSAyMSBMMjEgMjEiLz48cGF0aCBkPSJNMTkgMTkuNSBMMjEgMjEgTDE5IDIyLjUiLz48cGF0aCBkPSJNNiAyMCBDIDYgMTIsIDEwIDcsIDIwIDYiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Log scale</td>\n<td>Test Value and Stacked Test Values modes only. Applies a log\u2081\u2080 scale to the colour mapping for all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjciIHg9IjMiIHk9IjMiIHJ4PSIxIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMyIgeT0iMTQiIHJ4PSIxIi8+PHBhdGggZD0iTTE0IDRoNyIvPjxwYXRoIGQ9Ik0xNCA5aDciLz48cGF0aCBkPSJNMTQgMTVoNyIvPjxwYXRoIGQ9Ik0xNCAyMGg3Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Legend style</td>\n<td>Bin modes only. Sets where the bin legend sits relative to each card.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDQgTDUgMjAiLz48cGF0aCBkPSJNNSA0IEw4IDQiLz48cGF0aCBkPSJNNSAyMCBMOCAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxOSAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxNiA0Ii8+PHBhdGggZD0iTTE5IDIwIEwxNiAyMCIvPjxwYXRoIGQ9Ik01IDEyIEwxOSAxMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Colorbar range</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNOCAydjQiLz48cGF0aCBkPSJNMTIgMnY0Ii8+PHBhdGggZD0iTTE2IDJ2NCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgeD0iNCIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMGg2Ii8+PHBhdGggZD0iTTggMTRoOCIvPjxwYXRoIGQ9Ik04IDE4aDUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Findings</td>\n<td>Opens or closes the lot-level Findings sidebar.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjkiLz48cGF0aCBkPSJNMTMgMTdWNSIvPjxwYXRoIGQ9Ik04IDE3di0zIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Insights</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTAuMjkgMy44NiAxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6Ii8+PHBhdGggZD0iTTEyIDl2NCIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Data warnings</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>User guide</td>\n<td>Opens this guide.</td>\n</tr>\n</tbody></table>\n<p>Click a card's expand button to detach it into its own separate window with the\ncomplete single-map toolbar (falls back to a floating window inside the page if\nseparate windows aren't available in your environment). The vacated grid card\nbecomes a placeholder whose own button reattaches it; closing the detached\nwindow does the same.</p>\n<div data-wmap-demo=\"gallery\" class=\"wmap-demo\"></div><hr>\n<h2 id=\"4-interacting-with-dies\">4. Interacting with dies</h2>\n<h3 id=\"41-hover\">4.1 Hover</h3>\n<p>Hovering over a die shows a compact tooltip. It always includes the die grid\ncoordinates (x, y), and a retest count if the die was probed more than once.\nThe rest depends on the active plot mode:</p>\n<ul>\n<li><strong>Bin modes</strong> \u2014 the die's bin verdict (number and name, if named), plus a\nnote of how many test values are recorded for the die</li>\n<li><strong>Test Value mode</strong> \u2014 the active test's value in bold, flagged when it is\nout of spec, with the remaining tests summarised as "+N more tests"</li>\n<li><strong>Stacked modes</strong> \u2014 the single aggregated value or count at that position</li>\n</ul>\n<h3 id=\"42-zoom-and-pan\">4.2 Zoom and pan</h3>\n<p>Scroll to zoom in and out. Click and drag to pan when in Pan mode. The toolbar\nalso provides dedicated <strong>Zoom mode</strong> (drag to draw a zoom region), <strong>Zoom in</strong>,\n<strong>Zoom out</strong>, and <strong>Reset zoom</strong> buttons. Tooltips and die selection remain\naccurate at all zoom levels.</p>\n<h3 id=\"43-box-select\">4.3 Box select</h3>\n<p>Switch to Box select mode in the toolbar, then click and drag to draw a selection\nrectangle. The application may display statistics or details for the selected\ndies. This is useful for comparing a sub-region against the full wafer.\nUse <strong>Ctrl / Cmd + click</strong> to add individual dies to the current selection.\nPress <strong>Esc</strong> to clear.</p>\n<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\ntoolbar and drag to make your own selection, or Ctrl/Cmd + click individual dies.</em></p>\n<hr>\n<h2 id=\"5-findings-panel\">5. Findings panel</h2>\n<p>When spatial analysis has been run, the <strong>Findings</strong> panel lists statistically\ndetected patterns on the wafer. Open it from the toolbar.</p>\n<p>Each finding shows:</p>\n<ul>\n<li><strong>Severity</strong> \u2014 Unusual, Notable, or Info (ordered most to least significant)</li>\n<li><strong>Description</strong> \u2014 plain-language summary of what was detected and where</li>\n<li><strong>Click to highlight</strong> \u2014 clicking a finding highlights the affected dies on\nthe map with a black-and-white outline, visible against every colour scheme</li>\n</ul>\n<p><strong>Severity</strong> reflects how strong the statistical evidence is. <em>Unusual</em> findings\nhave both a very low adjusted p-value and a large effect size \u2014 they are reliably\nimportant. <em>Notable</em> findings are statistically significant with a meaningful\neffect but not as extreme. <em>Info</em> findings pass the significance threshold at\nlower strength and are worth reviewing but may reflect smaller or noisier patterns.</p>\n<div data-wmap-demo=\"findings\" class=\"wmap-demo\"></div><p><em>Findings panel open showing a detected edge-ring pattern. Click any row to\nhighlight the affected dies on the map.</em></p>\n<h3 id=\"finding-types\">Finding types</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>What it indicates</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Ring</strong></td>\n<td>Yield or value difference between radial bands \u2014 e.g. centre vs edge gradient</td>\n</tr>\n<tr>\n<td><strong>Quadrant</strong></td>\n<td>Yield or value difference between N, S, E, or W quadrants</td>\n</tr>\n<tr>\n<td><strong>Sector</strong></td>\n<td>Asymmetry across finer angular slices \u2014 rotational bias or directional process variation</td>\n</tr>\n<tr>\n<td><strong>Test-site</strong></td>\n<td>Yield or value difference between parallel probe sites on the same wafer</td>\n</tr>\n<tr>\n<td><strong>Reticle position</strong></td>\n<td>Yield signature repeating at specific stepper field grid positions</td>\n</tr>\n<tr>\n<td><strong>Cluster</strong></td>\n<td>Contiguous group of failing dies denser than the background failure rate</td>\n</tr>\n<tr>\n<td><strong>Edge arc</strong></td>\n<td>Localised arc of failures near the wafer perimeter</td>\n</tr>\n<tr>\n<td><strong>Spatial pattern</strong></td>\n<td>Classification of an identified cluster shape \u2014 e.g. Donut, Scratch, Centre, Edge-localised, Random</td>\n</tr>\n</tbody></table>\n<p>Which finding types are active depends on the application's analysis\nconfiguration.</p>\n<p>When a spatial pattern classification is detected alongside supporting regional\nfindings (ring, quadrant, sector), the panel groups them together \u2014 the pattern\nclassification is the primary finding and the regional findings provide\nsupporting detail.</p>\n<hr>\n<h2 id=\"6-findings-sidebar\">6. Findings sidebar</h2>\n<p>The Findings sidebar shows detected anomalies for the current wafer or lot,\nalways docked next to the map so a clicked finding can highlight the affected\ndies right there. Open it from the toolbar. Severity, kind, and region filter\ncontrols at the top of the sidebar narrow the list down.</p>\n<div data-wmap-demo=\"summary-panel\" class=\"wmap-demo\"></div><p><em>The Findings sidebar open alongside a single wafer. Click any finding to\nhighlight the affected dies; use the filter controls to narrow by severity,\nkind, or region.</em></p>\n<p>Yield, bin breakdown, ring/quadrant regional yield, and per-test statistics \u2014\npreviously shown in this same panel \u2014 now live in the\n<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>'s Overview sub-tab instead, since that content\ndoesn't need the map on screen the way a finding's highlight does.</p>\n<p>A <strong>Summary report</strong> button (when present) opens a printable full-detail\nreport in a new window or tab, still covering everything findings-adjacent \u2014\nyield, bin breakdown, ring and quadrant statistics, per-test statistics, and\nthe findings list \u2014 and can be saved as a PDF from your browser's print\ndialog.</p>\n<h3 id=\"why-some-findings-name-two-bins\">Why some findings name two bins</h3>\n<p>A finding may read <strong>"hard bin 3 and soft bin 3 (same dies)"</strong>. That is one\ngroup of dies counted in two bin spaces, not two separate groups added together.\nHard and soft bins are independent numbering systems, so this wording appears\nonly when the two happen to cover exactly the same dies \u2014 reporting it twice\nwould look like two independent problems.</p>\n<p>For the same reason, when a single pass bin is configured you will see the\n<strong>yield</strong> finding for a region but not a separate finding for the pass bin\nitself: "pass-bin occurrence is 22 points lower" and "yield is 22 points lower"\nare the same sentence.</p>\n<p>Nothing is discarded \u2014 an application reading the findings programmatically\nstill receives every one of them.</p>\n<p>For <strong>lot-level views</strong> (gallery), the sidebar shows lot-level findings by\ndefault, with a <strong>Wafers</strong> tab listing every wafer that has its own per-wafer\nfindings \u2014 click a row to open that wafer.</p>\n<hr>\n<h2 id=\"7-lot-stack-maps\">7. Lot-stack maps</h2>\n<p>A lot-stack map combines multiple individual wafer results into a single\ncomposite view. The display clearly identifies this: the number of wafers\nincluded and the aggregation method in use are shown in the panel header\n(for example, "3 wafers \u00B7 mean") so you know you are not viewing a single\nwafer's data.</p>\n<p>Individual die coordinates are preserved. For each die grid position, results\nfrom all wafers are aggregated into a single value or bin count according to\nthe selected aggregation method.</p>\n<h3 id=\"stacked-plot-modes\">Stacked plot modes</h3>\n<p>Switching to a stacked mode changes what each die's colour represents:</p>\n<table>\n<thead>\n<tr>\n<th>Mode</th>\n<th>What the colour shows</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Stacked Hard Bins</strong></td>\n<td>For each die position, the count of wafers on which that bin appeared \u2014 one card per bin category</td>\n</tr>\n<tr>\n<td><strong>Stacked Soft Bins</strong></td>\n<td>Same as above, for soft bin categories</td>\n</tr>\n<tr>\n<td><strong>Stacked Test Values</strong></td>\n<td>For each die position, an aggregate of the test measurement across all wafers</td>\n</tr>\n</tbody></table>\n<h3 id=\"aggregation-method\">Aggregation method</h3>\n<p>In <strong>Stacked Test Values</strong> mode, use the <strong>Aggregation method</strong> toolbar button (\u03A3)\nto choose how values from each wafer are combined at each die position:</p>\n<table>\n<thead>\n<tr>\n<th>Method</th>\n<th>Result</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Mean</strong></td>\n<td>Average value across all wafers</td>\n</tr>\n<tr>\n<td><strong>Median</strong></td>\n<td>Middle value \u2014 less sensitive to outliers than mean</td>\n</tr>\n<tr>\n<td><strong>Std Dev</strong></td>\n<td>Standard deviation \u2014 shows where values vary most across the lot</td>\n</tr>\n<tr>\n<td><strong>Min</strong></td>\n<td>Lowest value seen at that position</td>\n</tr>\n<tr>\n<td><strong>Max</strong></td>\n<td>Highest value seen at that position</td>\n</tr>\n<tr>\n<td><strong>Count</strong></td>\n<td>Number of wafers with data at that position</td>\n</tr>\n</tbody></table>\n<h3 id=\"gallery-stacked-modes\">Gallery stacked modes</h3>\n<p>In a gallery, stacked modes are always available in the control bar. Switching to\na stacked mode shows one card per bin category or per test parameter, aggregated\nacross all wafers in the gallery.</p>\n<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\nbin 1 (Pass) or bin 2 (Fail) at that location.</em></p>\n<hr>\n<h2 id=\"8-insights-tab\">8. Insights tab</h2>\n<p>The <strong>Insights</strong> toolbar button (single map or gallery) swaps the wafer view\nfor a chart suite computed from the same die data \u2014 without leaving the\ntoolbar. Click it again to return to the map. Independent of the Findings\nsidebar (Section 6) \u2014 the two toggle independently, and opening one never\nhides the other's toolbar button, since Findings has nothing to highlight\nagainst once the map is replaced.</p>\n<p>Insights is organized into three sub-tabs:</p>\n<ul>\n<li><strong>Overview</strong> \u2014 a yield bar (labelled with the pass bins actually in use), a\nhard/soft bin pareto, and ring/quadrant regional yield and per-test\nmin/mean/max/spec-yield statistics.</li>\n<li><strong>Distributions</strong> \u2014 process capability (Cp/Cpk/Pp/Ppk for tests with both a\nlower and upper spec limit; tests missing a spec still appear, normalized\nonto their own range and sorted by variability), a test-value box plot, and\na value histogram. Clicking a capability box drives the box plot and\nhistogram onto that same test automatically.</li>\n<li><strong>Correlation</strong> \u2014 a test-to-test correlation matrix and a die-level scatter\nplot. Clicking a matrix cell drives the scatter plot onto that pair.</li>\n</ul>\n<p>In a gallery with more than one wafer, a <strong>Group by</strong> control appears whenever\nwafer metadata (lot, product, test program, temperature, split, or a custom\nfield) actually varies across the loaded wafers \u2014 grouping pools or restricts\neach panel differently depending on what makes sense for that chart type.\nHistogram, correlation, and scatter also offer a <strong>Wafer</strong> picker to narrow\nfrom "all wafers pooled" down to one wafer at a time. Clicking a yield bar or\nbox-plot row for one wafer opens that wafer's own map \u2014 a box-plot click opens\ndirectly on the test you were looking at.</p>\n<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,\nring/quadrant yield, and per-test statistics \u2014 all computed from this wafer's\nown dies. The Distributions sub-tab has process capability, a test-value box\nplot and histogram; Correlation has a correlation matrix with scatter plot.\nIn a gallery, Overview also gains a "Group by" control and per-wafer\nyield/box-plot rows.</em></p>\n<p><em>Gallery Insights, Overview sub-tab: lot-wide yield by wafer (click a bar to\nopen that wafer's map), hard/soft bin pareto, ring and quadrant yield, and\npooled per-test statistics. The "\u2039 Gallery" tab returns to the card grid.</em></p>\n<p><em>Distributions sub-tab: process capability (coloured by Ppk \u2014 green capable,\norange marginal, red poor; tests without spec limits are muted and dashed), a\nper-wafer test-value box plot, and a value histogram. Clicking a capability\nbox drives the box plot and histogram onto that test.</em></p>\n<p><em>Correlation sub-tab: test-to-test Pearson correlation matrix (blue =\npositive, orange = negative; intensity = strength) and a die-level scatter\nplot coloured by hard bin. Clicking a matrix cell drives the scatter plot\nonto that pair.</em></p>\n<hr>\n<h2 id=\"9-reticle-overlay\">9. Reticle overlay</h2>\n<p>When reticle (stepper field) geometry is configured, the <strong>Reticle grid</strong> overlay\ndraws the stepper field boundaries on the wafer. Each rectangle represents one\nexposure field from the lithography stepper \u2014 the group of dies exposed in a\nsingle step. This lets you correlate failure patterns with specific reticle\npositions \u2014 useful for identifying stepper field signatures, alignment drift, or\nmask defects.</p>\n<div data-wmap-demo=\"reticle\" class=\"wmap-demo\"></div><p>Reticle-position findings in the Findings panel highlight the specific field\npositions that show elevated failure rates. Hovering any die also shows its\n<strong>Reticle (column, row)</strong> position \u2014 its location within its own stepper\nfield \u2014 just below the die's coordinate in the tooltip.</p>\n<script>// Inline demo script for the embedded user guide window.\n// Reads the library API from window.__wmapDemoApi at call time (not at script\n// execution time) \u2014 the API is set by the caller before invoking populateGuideDemos.\n// To add a new demo: add a handler below and a <div data-wmap-demo=\"id\"> in user-guide.md.\n(function () {\n function makeDemoWafer(radius) {\n radius = radius || 7;\n var out = [];\n for (var x = -radius; x <= radius; x++) {\n for (var y = -radius; y <= radius; y++) {\n if (Math.sqrt(x * x + y * y) > radius + 0.5) continue;\n out.push({\n x: x, y: y,\n hbin: (Math.abs(x * 3 + y * 7) % 10 < 2) ? 2 : 1,\n testValues: { 1: +((x * 0.5 + y * 0.3 + 5).toFixed(3)) },\n });\n }\n }\n return out;\n }\n\n // Wafer with edge-ring failures \u2014 dies near perimeter are bin 2, interior pass.\n function makeEdgeFailWafer(radius) {\n radius = radius || 7;\n var out = [];\n for (var x = -radius; x <= radius; x++) {\n for (var y = -radius; y <= radius; y++) {\n var dist = Math.sqrt(x * x + y * y);\n if (dist > radius + 0.5) continue;\n out.push({ x: x, y: y, hbin: dist > radius - 1.8 ? 2 : 1 });\n }\n }\n return out;\n }\n\n function populateGuideDemos(root) {\n /** @type {import('../dist/index.js')} */\n var api = window.__wmapDemoApi;\n if (!api) return;\n var buildWaferMap = api.buildWaferMap;\n var renderWaferMap = api.renderWaferMap;\n var renderWaferGallery = api.renderWaferGallery;\n var analyzeWaferMap = api.analyzeWaferMap;\n\n var demos = root.querySelectorAll('[data-wmap-demo]');\n if (!demos.length) return;\n\n var results = makeDemoWafer();\n var hbinDefs = [{ bin: 1, name: 'Pass' }, { bin: 2, name: 'Fail' }];\n var testDefs = [{ testNumber: 1, name: 'Test A', unit: 'V', limitLow: 1.5, limitHigh: 8.5 }];\n\n var binResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, passBins: [1], waferConfig: { notch: { type: 'right' } }, });\n var valueResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } }, });\n\n // Every renderWaferMap/renderWaferGallery call below returns a controller\n // with its own ResizeObserver + matchMedia listeners. Collect every handle\n // so the caller (toolbar.ts's guide close paths) can destroy() them all \u2014\n // otherwise they leak for the lifetime of the host page whenever the guide\n // is shown as an in-page overlay rather than a real popup (the popup path\n // masks the leak by tearing down its own window/realm on close).\n var handles = [];\n\n for (var i = 0; i < demos.length; i++) {\n var el = demos[i];\n var id = el.dataset.wmapDemo;\n try {\n if (id === 'value-heatmap') {\n handles.push(renderWaferMap(el, valueResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'value', activeTest: 1 }\n }));\n\n } else if (id === 'spec-passfail') {\n handles.push(renderWaferMap(el, valueResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'value', activeTest: 1, passFailDisplay: 'spec' }\n }));\n\n } else if (id === 'bin-highlight') {\n // Show bin 2 highlighted (dimmed all others) so the feature is visible without interaction.\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', highlightBin: 2 }\n }));\n\n } else if (id === 'bin-map') {\n // basic hardbin map with no toolbar, just the wafer display.\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', showXYIndicator: true }\n }));\n\n } else if (id === 'orientation') {\n // Show the wafer rotated 90\u00B0 so the notch is clearly on the left side,\n // illustrating that the display orientation can be adjusted.\n\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', rotation: 90, showXYIndicator: true }\n }));\n\n } else if (id === 'overlays') {\n // Show ring boundaries, quadrant lines, and XY indicator all active.\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: {\n plotMode: 'hardBin',\n showRingBoundaries: true,\n showQuadrantBoundaries: true,\n showXYIndicator: true,\n }\n }));\n\n } else if (id === 'gallery') {\n if (!renderWaferGallery) {\n // Expected, not a bug: a guide opened from a single-wafer host\n // (renderWaferMap.ts's openGuideWindow) deliberately omits\n // renderWaferGallery to avoid a circular import between the two\n // render entry points \u2014 see its own doc comment. Skip this one\n // demo rather than falling into the catch below and logging a\n // scary \"failed\" warning for an intentional gap.\n continue;\n }\n var items = [0, 1, 2, 3].map(function (n) {\n var r = buildWaferMap({ results: makeDemoWafer(6 + n), hbinDefs: hbinDefs, passBins: [1] });\n return Object.assign({}, r, { label: 'Wafer ' + (n + 1) });\n });\n handles.push(renderWaferGallery(el, items));\n\n } else if (id === 'findings') {\n // Build a wafer with a strong edge-ring failure pattern so findings are guaranteed.\n var edgeResults = makeEdgeFailWafer(7);\n var edgeResult = buildWaferMap({ results: edgeResults, hbinDefs: hbinDefs, passBins: [1] });\n var summary = analyzeWaferMap ? analyzeWaferMap(edgeResult) : null;\n handles.push(renderWaferMap(el, edgeResult, {\n showToolbar: true, showTooltip: true,\n viewOptions: { plotMode: 'hardBin' },\n statsSummary: summary || undefined,\n findings: summary ? { defaultOpen: true } : undefined,\n }));\n\n } else if (id === 'lot-stack') {\n // Count how many wafers (out of 3) each die failed (bin 2) \u2014 shown as a heatmap.\n function makeLotWafer(seed) {\n var r = 7, out = [];\n for (var x = -r; x <= r; x++) {\n for (var y = -r; y <= r; y++) {\n if (Math.sqrt(x * x + y * y) > r + 0.5) continue;\n out.push({ x: x, y: y, hbin: (Math.abs(x * seed + y * (seed + 4)) % 10 < 2) ? 2 : 1 });\n }\n }\n return out;\n }\n var stackResult = buildWaferMap({\n lotStack: { results: [makeLotWafer(3), makeLotWafer(7), makeLotWafer(11)], method: 'countBin', targetBin: 2 },\n hbinDefs: hbinDefs,\n passBins: [1],\n });\n handles.push(renderWaferMap(el, stackResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'stackedBins' }\n }));\n\n } else if (id === 'box-select') {\n // Box-select is interactive \u2014 render WITH the toolbar so the box-select\n // tool is reachable, and pre-select a cluster of dies so the user sees\n // what a selection looks like before dragging their own.\n var bsResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } } });\n var bsCtrl = renderWaferMap(el, bsResult, {\n showTooltip: true,\n viewOptions: { plotMode: 'hardBin' },\n onSelect: function () { /* host app would show selection stats here */ },\n });\n handles.push(bsCtrl);\n // Highlight a 3\u00D73 block near the centre as an illustrative initial selection.\n var preSel = bsResult.dies.filter(function (d) {\n return d.x >= -1 && d.x <= 1 && d.y >= -1 && d.y <= 1;\n });\n if (bsCtrl && bsCtrl.setSelection) bsCtrl.setSelection(preSel);\n\n } else if (id === 'summary-panel') {\n // Full summary panel, opened by default, on a wafer with bins + test\n // values so yield, bin breakdown, and per-test stats are all populated.\n var spResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } } });\n // computePerTestStats: true adds the cheap per-test value summary to the\n // panel without the heavier regional test-value findings pass.\n var spSummary = analyzeWaferMap ? analyzeWaferMap(spResult, { computePerTestStats: true }) : null;\n handles.push(renderWaferMap(el, spResult, {\n showTooltip: true,\n viewOptions: { plotMode: 'hardBin' },\n statsSummary: spSummary || undefined,\n summaryPanel: { defaultOpen: true },\n }));\n\n } else if (id === 'analysis') {\n // renderWaferGallery is NOT necessarily available here \u2014 a guide\n // window opened from a single-map host (renderWaferMap.ts) passes\n // renderWaferGallery: undefined to avoid a circular import, so this\n // demo (unlike 'gallery' above) must use renderWaferMap, which is\n // always present regardless of which host opened the guide.\n //\n // Two parametric tests (one with spec limits, so capability has\n // something to plot) so distributions/capability/correlation/\n // scatter all have real data to show, alongside yield/bin pareto.\n var analysisTestDefs = [\n { testNumber: 1, name: 'Idsat', unit: 'A', limitLow: 1.5, limitHigh: 8.5 },\n { testNumber: 2, name: 'Vth', unit: 'V' },\n ];\n function makeAnalysisWafer(seed) {\n var r = 7, out = [];\n for (var x = -r; x <= r; x++) {\n for (var y = -r; y <= r; y++) {\n if (Math.sqrt(x * x + y * y) > r + 0.5) continue;\n out.push({\n x: x, y: y,\n hbin: (Math.abs(x * 3 + y * 7 + seed) % 10 < 2) ? 2 : 1,\n testValues: {\n 1: +((x * 0.5 + y * 0.3 + 5 + seed * 0.2).toFixed(3)),\n 2: +((x * -0.2 + y * 0.4 + 2 + seed * 0.1).toFixed(3)),\n },\n });\n }\n }\n return out;\n }\n var analysisResult = buildWaferMap({ results: makeAnalysisWafer(0), hbinDefs: hbinDefs, testDefs: analysisTestDefs, passBins: [1] });\n handles.push(renderWaferMap(el, analysisResult, {\n insights: { enabled: true },\n viewOptions: { plotMode: 'hardBin' },\n }));\n // Open the Insights tab by default \u2014 same click a user would make,\n // just pre-triggered so the feature is visible without interaction.\n var analysisBtn = el.querySelector('button[aria-label=\"Insights\"]');\n if (analysisBtn) analysisBtn.click();\n\n } else if (id === 'reticle') {\n var reticleResult = buildWaferMap({\n results: results, hbinDefs: hbinDefs, passBins: [1],\n reticleConfig: { width: 3, height: 2, anchorDie: { x: -1, y: 0 } },\n });\n handles.push(renderWaferMap(el, reticleResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', showReticle: true }\n }));\n }\n } catch (e) {\n console.warn('wmap guide demo failed:', id, e);\n }\n }\n\n // Exposed so the guide's close paths (toolbar.ts openGuideInFloatingWindow/\n // openGuideInPopup) can tear every demo down \u2014 see the `handles` comment\n // above. Guarded by identity (like __wmapDemoApi's restoreApi below) so a\n // stale/delayed close (e.g. the popup-closed poll firing after a rapid\n // reopen already overwrote this) can't destroy a newer instance's demos.\n var destroyer = function () {\n if (window.__wmapDestroyGuideDemos === destroyer) window.__wmapDestroyGuideDemos = null;\n for (var j = 0; j < handles.length; j++) {\n try { handles[j] && handles[j].destroy && handles[j].destroy(); } catch (e) { /* best-effort teardown */ }\n }\n handles = [];\n };\n window.__wmapDestroyGuideDemos = destroyer;\n }\n\n // Expose for callers \u2014 __wmapDemoApi must be set before calling:\n // - Guide window (toolbar.ts openUserGuideWindow): sets __wmapDemoApi then calls __wmapPopulateGuideDemos(guideEl)\n // - Docs site (guide-demos-init.js): sets __wmapDemoApi then calls __wmapPopulateGuideDemos(document)\n window.__wmapPopulateGuideDemos = populateGuideDemos;\n})();\n</script></div>";
|
|
1
|
+
export declare const USER_GUIDE_HTML = "<div class=\"wmap-guide\">\n<style>\n.wmap-guide{font-family:system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.65;color:var(--wmap-text,#1a1a1a);background:var(--wmap-surface,#fff);padding:24px 32px;max-width:var(--wmap-guide-reading-width,720px);margin:0 auto;overflow-y:auto;height:100%;box-sizing:border-box}\n.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)}\n.wmap-guide-version{font-size:11px;font-weight:400;color:var(--wmap-text-muted,#888);white-space:nowrap}\n.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)}\n.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}\n.wmap-guide h3 img{width:20px;height:20px;display:inline;vertical-align:middle;border:none;border-radius:0;margin:0}\n.wmap-guide p{margin:0 0 12px}\n.wmap-guide ul,.wmap-guide ol{margin:0 0 12px;padding-left:22px}\n.wmap-guide li{margin-bottom:4px}\n.wmap-guide table{border-collapse:collapse;width:100%;margin:0 0 16px;font-size:13px}\n.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)}\n.wmap-guide td{padding:6px 10px;border:1px solid var(--wmap-border,#e2e5ea);vertical-align:middle}\n.wmap-guide tr:nth-child(even) td{background:var(--wmap-bg-hover,#fafbfc)}\n.wmap-guide strong{font-weight:600}\n.wmap-guide code{font-family:monospace;font-size:12px;background:var(--wmap-bg-active,#f0f2f5);padding:1px 4px;border-radius:3px}\n.wmap-guide hr{border:none;border-top:1px solid var(--wmap-border,#e9eaec);margin:24px 0}\n.wmap-guide img{max-width:100%;height:auto;border:1px solid var(--wmap-border,#e2e5ea);border-radius:6px;margin:8px 0;display:block}\n.wmap-guide td img{width:20px;height:20px;max-width:none;display:inline-block;vertical-align:middle;border:none;border-radius:0;margin:0}\n.wmap-guide a{color:var(--wmap-icon-active,#0066cc);text-decoration:none}\n.wmap-guide a:hover{text-decoration:underline}\n.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)}\n.wmap-guide-online-link a{color:var(--wmap-icon-active,#0066cc)}\n.wmap-demo{width:100%;height:220px;margin:12px 0;border:1px solid #e2e5ea;border-radius:6px;overflow:hidden;background:#f8f9fa}\n.wmap-demo[data-wmap-demo=\"gallery\"]{height:380px}\n.wmap-demo[data-wmap-demo=\"findings\"]{height:280px}\n.wmap-demo[data-wmap-demo=\"summary-panel\"]{height:300px}\n.wmap-demo[data-wmap-demo=\"box-select\"]{height:280px}\n.wmap-demo[data-wmap-demo=\"analysis\"]{height:600px}\n@media print{\n /* Print only the guide's own content, never the host page, and never a\n clipped single screenful. The guide window opens one of two ways\n (toolbar.ts's openUserGuideWindow) and this must handle both:\n - a real popup (openGuideInPopup): buildGuideContent's content div\n (class wmap-guide-content) is body's ONLY child directly \u2014 body\n itself is height:100vh;overflow:hidden for the screen layout, which\n without an override clips print to a single blank-looking page.\n - the in-page floating-window fallback (openGuideInFloatingWindow,\n used whenever window.open() is blocked \u2014 e.g. always in Tauri):\n the same content div sits inside .wmap-window-box, itself a sibling\n of the rest of the host page's own content, which must stay hidden.\n Both need: undo the screen-only height/overflow clipping (100vh/\n overflow:hidden bodies, flex:1/overflow:auto content panes) so the\n guide can paginate over multiple printed pages instead of clipping to\n one, hide anything that isn't the guide itself, and drop the\n print-irrelevant \"view online\" banner. */\n body{overflow:visible!important;height:auto!important}\n /* Hide everything except the guide's own content div (covers the real-\n popup case, where content is body's only child) and .wmap-window-box\n (covers the floating-window case, where content is nested inside it \u2014\n that subtree gets its own unclip rules below rather than being hidden\n here). */\n body > *:not(.wmap-guide-content):not(.wmap-window-box){display:none!important}\n .wmap-guide-content{flex:none!important;overflow:visible!important;height:auto!important;min-height:0!important}\n 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}\n .wmap-window-box > div:first-child{display:none!important}\n /* contentWrap (flex container) and the scroll wrapper inside it both clip/scroll;\n unclip them so the full guide paginates instead of one screenful printing. */\n .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}\n .wmap-guide{max-width:none!important;height:auto!important;overflow:visible!important;padding:0!important}\n /* Generic counterpart to the direct .wmap-guide override above \u2014 widens\n ANY reading column that opts into the shared --wmap-guide-reading-width\n convention (see UserGuideExtension's doc comment), not just wmap's own,\n without this print stylesheet needing to know a host's class names. */\n .wmap-guide-content{--wmap-guide-reading-width:none!important}\n .wmap-guide-online-link{display:none!important}\n /* The combined-contents sticky bar (toolbar.ts's buildGuideToc) is a\n screen-only navigation aid \u2014 sticky positioning is meaningless on a\n paginated printout, and a live \"Contents \u25BE / Top\" bar has no useful\n printed form, so it's dropped the same way the \"view online\" link is. */\n .wmap-guide-toc{display:none!important}\n}\n</style>\n<h1 id=\"wafer-map-user-guide\">Wafer Map \u2014 User Guide<span class=\"wmap-guide-version\" title=\"Built 2026-08-28T14:50:01.535Z\">v0.26.1</span></h1>\n<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>\n<p>This guide describes the display and analysis features of the wafer map viewer.\nIt is written for users who may be semiconductor test engineers, device engineers, and yield engineers\nor anyone else who may use a wafer map application \u2014 not for developers integrating the wafermap library.</p>\n<p>Some features depend on what data the application has loaded (bin names, test\ndefinitions, spec limits, reticle geometry). Where this applies it is noted.</p>\n<p><strong>Getting oriented.</strong> The wafer map is an interactive viewer. A toolbar is always\npresent at the top-right of the map \u2014 use it to change what the colours represent,\ntoggle overlays, rotate or flip the wafer, zoom, select dies, and open the summary\npanel. Hover any die for a tooltip; the panels and tooltips always report the\noriginal die grid coordinates, never the on-screen position after a rotate or flip.</p>\n<hr>\n<h2 id=\"1-reading-the-map\">1. Reading the map</h2>\n<h3 id=\"11-die-grid-and-coordinates\">1.1 Die grid and coordinates</h3>\n<p>Each square on the wafer represents one die. The position labels you see \u2014 in\ntooltips, axis ticks, and selection readouts \u2014 are <strong>die grid coordinates</strong>: usually the\nX and Y step indices from the prober (integers such as \u22127, 0, 5). They are not\nmillimetre values.</p>\n<p>These coordinates are always the original grid values. Rotating or flipping the\ndisplay does not change the coordinate labels \u2014 a die at (3, \u22122) always reads\n(3, \u22122) regardless of how the wafer is oriented on screen.</p>\n<h3 id=\"12-wafer-orientation\">1.2 Wafer orientation</h3>\n<p>The notch (shown as a V-notch or flat edge) marks the physical reference edge of\nthe wafer as configured. Use the <strong>Orientation</strong> toolbar controls to rotate or flip\nthe display to match your convention; die coordinates are unaffected.</p>\n<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\u00B0. The notch has moved, but die coordinates \u2014 shown in tooltips \u2014 remain their original grid/prober values.</em></p>\n<div data-wmap-demo=\"orientation\" class=\"wmap-demo\"></div><h3 id=\"13-die-appearance\">1.3 Die appearance</h3>\n<table>\n<thead>\n<tr>\n<th>Appearance</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Solid colour</td>\n<td>Active plot value \u2014 bin category or test measurement</td>\n</tr>\n<tr>\n<td>Muted grey at perimeter</td>\n<td>Partial die \u2014 falls outside the wafer circle boundary</td>\n</tr>\n<tr>\n<td>Neutral grey (interior)</td>\n<td>No data \u2014 die has no bin or test result in the loaded dataset</td>\n</tr>\n<tr>\n<td>Dimmed fill (interior)</td>\n<td>Edge-excluded die \u2014 falls within the edge exclusion band configured for this wafer</td>\n</tr>\n</tbody></table>\n<p>No-data grey and partial-die grey are visually distinct. A no-data die is not a\nfail; it simply has no result recorded. Edge-excluded dies are shown dimmed and are\nnot counted in yield calculations.</p>\n<h3 id=\"14-legend-and-colorbar\">1.4 Legend and colorbar</h3>\n<p><strong>Bin modes</strong> show a discrete colour legend: one swatch per bin, with bin number\nand name if the application has supplied bin names.</p>\n<p><strong>Value mode</strong> shows a continuous colorbar: the colour scale runs from the minimum\nto maximum value, with units when available. The colorbar is informational only \u2014\nclicking it has no effect. To switch to a pass/fail view, use the <strong>Spec pass/fail</strong>\nor <strong>Test pass/fail</strong> option in the Overlays menu (available when spec limits are\ndefined, or a recorded verdict exists, for the active test).</p>\n<p><strong>Spec pass/fail mode</strong> replaces the colorbar with a small <strong>spec legend</strong>: Pass,\nFail high, and Fail low swatches (only the categories that apply to the test's\nlimits) with a die count beside each. This judges dies against the test's spec\nlimits (<code>limitLow</code> / <code>limitHigh</code>).</p>\n<p><strong>Test pass/fail mode</strong> replaces the colorbar with a <strong>Pass / Fail legend</strong> and die\ncounts, coloured by the tester's own <strong>recorded</strong> verdict for that test \u2014 not a\nspec-limit judgement. A test with no measured value (a functional, go/no-go test)\nalways displays this way; selecting it switches the map into Test pass/fail\nautomatically, since there is nothing to plot on a gradient.</p>\n<p>Every map also shows a short <strong>title</strong> by the colorbar or legend naming what is\ndisplayed \u2014 the test name (and number, in spec mode), the bin type, or the stacked\nwafer count.</p>\n<p>Clicking a bin swatch in the legend filters the display to that bin\n(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>\n<h3 id=\"15-wafers-and-dies-with-no-position-data\">1.5 Wafers and dies with no position data</h3>\n<p>Not every die necessarily has a reported grid position \u2014 some data sources supply bin or test\nresults with no X/Y coordinates at all, for some or every die on a wafer.</p>\n<p><strong>A fully positionless wafer</strong> never renders as a map or gallery card \u2014 showing dies at\nfabricated positions would risk being misread as real spatial layout. Instead the card shows a\ncompact summary matching the active plot mode: a <strong>bin breakdown</strong> (coloured the same as a\npositioned card's own bin legend) for hard/soft-bin modes, or a <strong>histogram</strong> for value mode \u2014\ncoloured through the same colour scheme, log-scale, and spec/data-range settings the map itself\nuses, so switching those in the toolbar updates the chart the same way it would a real map. A\n<strong>View die list</strong> toggle switches to the full per-die table (position/site, hard bin, soft bin,\nevery test value) with its own CSV export; <strong>View chart</strong> switches back.</p>\n<p><strong>A mixed wafer</strong> \u2014 some dies positioned, some not \u2014 renders its normal map for the positioned\ndies, plus an expandable <strong>"+N dies without position data"</strong> footer beneath the card. Expanding\nit (click the footer or its chevron) shows the same chart/die-list toggle, scoped to just the\nunpositioned subset.</p>\n<p>The toolbar's spatial-only controls (zoom, pan, box select, save image, orientation, overlays,\nlegend position) are hidden on a fully positionless card, since there's no map for them to act\non. Plot mode and colour scheme stay available \u2014 both still drive what the summary shows.</p>\n<p>Findings that depend on physical layout \u2014 edge ring, quadrants, sectors, reticle position,\ncluster and pattern detection \u2014 only ever consider positioned dies, so a positionless wafer\ncontributes none of these. Everything else \u2014 yield, bin counts, per-test statistics, and the\nInsights tab's histograms/correlation/scatter \u2014 still includes every die, positioned or not.</p>\n<hr>\n<h2 id=\"2-plot-modes\">2. Plot modes</h2>\n<p>The active plot mode determines what the colour of each die represents. Use the\n<strong>Plot mode</strong> toolbar dropdown to switch. Available modes depend on what data the\napplication has loaded.</p>\n<table>\n<thead>\n<tr>\n<th>Mode</th>\n<th>Colour represents</th>\n<th>Typical use</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Hard Bin</strong></td>\n<td>Physical sort result (hard bin number)</td>\n<td>Yield categorisation, pass/fail map</td>\n</tr>\n<tr>\n<td><strong>Soft Bin</strong></td>\n<td>Test-program failure category (soft bin number)</td>\n<td>Failure mode breakdown</td>\n</tr>\n<tr>\n<td><strong>Test Value</strong></td>\n<td>A single numeric measurement</td>\n<td>Parametric heatmap \u2014 leakage, Idsat, Vth, etc.</td>\n</tr>\n<tr>\n<td><strong>Stacked Hard Bins</strong></td>\n<td>Hard bin occurrence counts aggregated across multiple wafers</td>\n<td>Lot-level yield patterns</td>\n</tr>\n<tr>\n<td><strong>Stacked Soft Bins</strong></td>\n<td>Soft bin occurrence counts aggregated across multiple wafers</td>\n<td>Lot-level failure mode patterns</td>\n</tr>\n<tr>\n<td><strong>Stacked Test Values</strong></td>\n<td>Aggregated test values across multiple wafers</td>\n<td>Lot-level parametric trends</td>\n</tr>\n</tbody></table>\n<p>Stacked modes are only available on lot-stack maps (multiple wafers combined into\none display). The panel identifies how many wafers were stacked and which\naggregation method is active.</p>\n<h3 id=\"test-value-mode-colorbar-range-and-spec-limits\">Test Value mode \u2014 colorbar range and spec limits</h3>\n<p>When spec limits are defined for the active test, two additional display options\nbecome available:</p>\n<ul>\n<li><strong>Colorbar range \u2014 Data / Spec</strong>: switches the colorbar scale between the\nactual data extent and the spec limit bounds. This affects only the colorbar's\nrange, never how out-of-spec dies are shown. In <strong>both</strong> ranges every die is\ncoloured by the gradient so you can read the value distribution, and out-of-spec\ndies are marked with a triangle \u2014 pointing <strong>down (\u25BD) for below LSL</strong>, <strong>up (\u25B3)\nfor above USL</strong> \u2014 so they stand out without leaving the distribution. The\ntriangle is drawn black or white per die for contrast against its own colour, so\nit stays visible under any colour scheme, and its shape (not colour) carries the\nbelow/above-limit meaning.</li>\n<li><strong>Spec pass/fail</strong>: when active, dies within spec are shown in a pass colour\nand dies outside spec are highlighted \u2014 <strong>blue for below the Lower Spec Limit\n(LSL)</strong>, <strong>red for above the Upper Spec Limit (USL)</strong>. Both flags apply\nindependently; a die can be flagged on either or both limits. A spec legend\nreplaces the colorbar, listing each applicable category with its die count.</li>\n</ul>\n<p>Some tests have no measured value at all \u2014 a continuity check or any other\ngo/no-go test, where the only result is a recorded pass or fail. Selecting one\nof these <strong>functional tests</strong> as the active test switches the map into\n<strong>Test pass/fail</strong> automatically: a Pass/Fail legend by die count, coloured by\nthe tester's own recorded verdict rather than a spec-limit judgement (there is\nno gradient to fall back to). <strong>Test pass/fail</strong> is also available as an\nOverlays option on an ordinary parametric test when it carries recorded\nverdicts, as an alternative to spec-limit judgement.</p>\n<div data-wmap-demo=\"value-heatmap\" class=\"wmap-demo\"></div><div data-wmap-demo=\"spec-passfail\" class=\"wmap-demo\"></div><hr>\n<h2 id=\"3-toolbar-controls\">3. Toolbar controls</h2>\n<p>The toolbar sits at the top-right of the map and is always visible. Controls that\nare not applicable to the current mode are hidden automatically. (Hovering the map\nshows die tooltips \u2014 a separate thing from the toolbar, which is always present.)</p>\n<p><img src=\"data:image/png;base64,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\" alt=\"Single-map toolbar\"></p>\n<h3 id=\"single-map\">Single map</h3>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Control</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjciIHJ4PSI5IiByeT0iNCIgLz4KICAKICA8ZyBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS40IiBvcGFjaXR5PSIwLjg1Ij4KICAgIDxsaW5lIHgxPSI0IiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyIgLz4KICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMuNSIgeDI9IjEyIiB5Mj0iMTAuNSIgLz4KICA8L2c+CiAgCiAgPHBhdGggZD0iTTMgMTIgYzAgMi41IDQgNCA5IDQgczktMS41IDktNCIgLz4KICAKICA8cGF0aCBkPSJNMyAxNyBjMCAyLjUgNCA0IDkgNCBzOS0xLjUgOS00IiAvPgo8L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Plot mode</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDEyczMuNi03IDEwLTcgMTAgNyAxMCA3LTMuNiA3LTEwIDctMTAtNy0xMC03eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Overlays</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIi8+PHBhdGggZD0iTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoiLz48cGF0aCBkPSJNOSA4Yy0xLjgwNCAyLjcxLTMuOTcgMy40Ni02LjU4MyAzLjk0OGEuNTA3LjUwNyAwIDAgMC0uMzAyLjgxOWw3LjMyIDguODgzYTEgMSAwIDAgMCAxLjE4NS4yMDRDMTIuNzM1IDIwLjQwNSAxNiAxNi43OTIgMTYgMTUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Colour scheme</td>\n<td>Switches the colour palette used for value and stacked modes. Available schemes depend on what the application has registered.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDIxIEw1IDMiLz48cGF0aCBkPSJNMy41IDUgTDUgMyBMNi41IDUiLz48cGF0aCBkPSJNNSAyMSBMMjEgMjEiLz48cGF0aCBkPSJNMTkgMTkuNSBMMjEgMjEgTDE5IDIyLjUiLz48cGF0aCBkPSJNNiAyMCBDIDYgMTIsIDEwIDcsIDIwIDYiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Log scale</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDQgTDUgMjAiLz48cGF0aCBkPSJNNSA0IEw4IDQiLz48cGF0aCBkPSJNNSAyMCBMOCAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxOSAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxNiA0Ii8+PHBhdGggZD0iTTE5IDIwIEwxNiAyMCIvPjxwYXRoIGQ9Ik01IDEyIEwxOSAxMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Colorbar range</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjciIHg9IjMiIHk9IjMiIHJ4PSIxIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMyIgeT0iMTQiIHJ4PSIxIi8+PHBhdGggZD0iTTE0IDRoNyIvPjxwYXRoIGQ9Ik0xNCA5aDciLz48cGF0aCBkPSJNMTQgMTVoNyIvPjxwYXRoIGQ9Ik0xNCAyMGg3Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Legend style</td>\n<td>Bin modes only. Controls where the bin legend is positioned relative to the map: Default (right), Compact, Left, Top, Bottom, or Floating.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlnb24gcG9pbnRzPSIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzYiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Orientation</td>\n<td>Menu of display transforms: <strong>Rotate 90\u00B0 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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xMyAxMy41IDItMi41LTItMi41Ii8+PHBhdGggZD0ibTIxIDIxLTQuMy00LjMiLz48cGF0aCBkPSJNOSA4LjUgNyAxMWwyIDIuNSIvPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Zoom mode</td>\n<td>Click and drag to draw a zoom region.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iMTEiIHgyPSIxMSIgeTE9IjgiIHkyPSIxNCIvPjxsaW5lIHgxPSI4IiB4Mj0iMTQiIHkxPSIxMSIgeTI9IjExIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Zoom in</td>\n<td>Zooms in one step.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiLz48bGluZSB4MT0iMjEiIHgyPSIxNi42NSIgeTE9IjIxIiB5Mj0iMTYuNjUiLz48bGluZSB4MT0iOCIgeDI9IjE0IiB5MT0iMTEiIHkyPSIxMSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Zoom out</td>\n<td>Zooms out one step.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIvPjxwYXRoIGQ9Ik0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Reset zoom</td>\n<td>Returns the map to the default fitted view.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMiAydjIwIi8+PHBhdGggZD0ibTE1IDE5LTMgMy0zLTMiLz48cGF0aCBkPSJtMTkgOSAzIDMtMyAzIi8+PHBhdGggZD0iTTIgMTJoMjAiLz48cGF0aCBkPSJtNSA5LTMgMyAzIDMiLz48cGF0aCBkPSJtOSA1IDMtMyAzIDMiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Pan mode</td>\n<td>Click and drag to pan the map.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDNhMiAyIDAgMCAwLTIgMiIvPjxwYXRoIGQ9Ik0xOSAzYTIgMiAwIDAgMSAyIDIiLz48cGF0aCBkPSJNMjEgMTlhMiAyIDAgMCAxLTIgMiIvPjxwYXRoIGQ9Ik01IDIxYTIgMiAwIDAgMS0yLTIiLz48cGF0aCBkPSJNOSAzaDEiLz48cGF0aCBkPSJNOSAyMWgxIi8+PHBhdGggZD0iTTE0IDNoMSIvPjxwYXRoIGQ9Ik0xNCAyMWgxIi8+PHBhdGggZD0iTTMgOXYxIi8+PHBhdGggZD0iTTIxIDl2MSIvPjxwYXRoIGQ9Ik0zIDE0djEiLz48cGF0aCBkPSJNMjEgMTR2MSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Box select</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjkiLz48cGF0aCBkPSJNMTMgMTdWNSIvPjxwYXRoIGQ9Ik04IDE3di0zIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Insights</td>\n<td>Swaps the map for this wafer'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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNSAzaDZ2NiIvPjxwYXRoIGQ9Ik05IDIxSDN2LTYiLz48cGF0aCBkPSJNMjEgM2wtNyA3Ii8+PHBhdGggZD0iTTMgMjFsNy03Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Expand</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Save image</td>\n<td>Downloads the current map view as a PNG. Captures the canvas as displayed, including all active overlays and the legend.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNOCAydjQiLz48cGF0aCBkPSJNMTIgMnY0Ii8+PHBhdGggZD0iTTE2IDJ2NCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgeD0iNCIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMGg2Ii8+PHBhdGggZD0iTTggMTRoOCIvPjxwYXRoIGQ9Ik04IDE4aDUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Findings</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTAuMjkgMy44NiAxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6Ii8+PHBhdGggZD0iTTEyIDl2NCIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Data warnings</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>User guide</td>\n<td>Opens this guide.</td>\n</tr>\n</tbody></table>\n<p><strong>This guide's own window</strong> (and a gallery card detached into its own window,\nsee <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\nits header shows minimize, maximize, and close buttons, and it can be dragged\nand resized by its corner grip. Minimizing collapses it to a small title strip\nwithout closing it; click it again to restore.</p>\n<p><strong>Highlight bin</strong> \u2014 in bin modes, click any bin swatch in the legend to highlight\nthat bin and dim all others. Click again to clear. Useful for isolating a specific\nfailure category across the wafer.</p>\n<div data-wmap-demo=\"bin-highlight\" class=\"wmap-demo\"></div><p><em>Bin 2 (Fail) highlighted \u2014 all other bins are dimmed.</em></p>\n<h3 id=\"overlays\">Overlays</h3>\n<p>Use the <strong>Overlays</strong> menu to toggle optional display layers on and off:</p>\n<ul>\n<li><strong>XY axis indicator</strong> \u2014 shows X and Y axis lines through the wafer centre</li>\n<li><strong>Ring boundaries</strong> \u2014 concentric ring divisions that match the spatial analysis zones</li>\n<li><strong>Quadrant lines</strong> \u2014 divides the wafer into N, S, E, W quadrants</li>\n<li><strong>Die coordinate labels</strong> \u2014 draws the (x, y) grid position inside each die (useful at high zoom)</li>\n<li><strong>Reticle grid</strong> \u2014 stepper field grid (only shown when reticle geometry is configured)</li>\n<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>\n<li><strong>Test pass/fail</strong> \u2014 pass/fail colouring for Test Value mode, coloured by the tester's recorded verdict; always on for a functional (no measured value) active test</li>\n</ul>\n<div data-wmap-demo=\"overlays\" class=\"wmap-demo\"></div><p><em>Ring boundaries, quadrant lines, and XY indicator all active.</em></p>\n<h3 id=\"keyboard-shortcuts\">Keyboard shortcuts</h3>\n<table>\n<thead>\n<tr>\n<th>Key</th>\n<th>Action</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>E</strong></td>\n<td>Open the map in an enlarged modal overlay</td>\n</tr>\n<tr>\n<td><strong>F</strong></td>\n<td>Maximise / restore the modal (when expanded)</td>\n</tr>\n<tr>\n<td><strong>Esc</strong></td>\n<td>Close the expanded modal, or clear the die selection</td>\n</tr>\n<tr>\n<td><strong>Ctrl / Cmd + click</strong></td>\n<td>Add a die to the current selection</td>\n</tr>\n<tr>\n<td><strong>Mouse wheel / scroll</strong></td>\n<td>Zoom in and out at the cursor</td>\n</tr>\n<tr>\n<td><strong>Ctrl / Cmd + <code>+</code></strong> / <strong><code>-</code></strong></td>\n<td>Zoom in / zoom out</td>\n</tr>\n<tr>\n<td><strong>Ctrl / Cmd + <code>0</code></strong></td>\n<td>Reset zoom to the fitted view</td>\n</tr>\n<tr>\n<td><strong>Arrow keys</strong></td>\n<td>Pan the map</td>\n</tr>\n<tr>\n<td><strong>Space (hold) + drag</strong></td>\n<td>Temporarily pan without leaving the current tool</td>\n</tr>\n</tbody></table>\n<h3 id=\"gallery\">Gallery</h3>\n<p>The gallery control bar applies to all cards simultaneously.</p>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Control</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjciIHJ4PSI5IiByeT0iNCIgLz4KICAKICA8ZyBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS40IiBvcGFjaXR5PSIwLjg1Ij4KICAgIDxsaW5lIHgxPSI0IiB5MT0iNyIgeDI9IjIwIiB5Mj0iNyIgLz4KICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMuNSIgeDI9IjEyIiB5Mj0iMTAuNSIgLz4KICA8L2c+CiAgCiAgPHBhdGggZD0iTTMgMTIgYzAgMi41IDQgNCA5IDQgczktMS41IDktNCIgLz4KICAKICA8cGF0aCBkPSJNMyAxNyBjMCAyLjUgNCA0IDkgNCBzOS0xLjUgOS00IiAvPgo8L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Plot mode</td>\n<td>Switches the plot mode for all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDEyczMuNi03IDEwLTcgMTAgNyAxMCA3LTMuNiA3LTEwIDctMTAtNy0xMC03eiIvPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Overlays</td>\n<td>Toggles display layers for all cards simultaneously.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Im0xNC42MjIgMTcuODk3LTEwLjY4LTIuOTEzIi8+PHBhdGggZD0iTTE4LjM3NiAyLjYyMmExIDEgMCAxIDEgMy4wMDIgMy4wMDJMMTcuMzYgOS42NDNhLjUuNSAwIDAgMCAwIC43MDdsLjk0NC45NDRhMi40MSAyLjQxIDAgMCAxIDAgMy40MDhsLS45NDQuOTQ0YS41LjUgMCAwIDEtLjcwNyAwTDguMzU0IDcuMzQ4YS41LjUgMCAwIDEgMC0uNzA3bC45NDQtLjk0NGEyLjQxIDIuNDEgMCAwIDEgMy40MDggMGwuOTQ0Ljk0NGEuNS41IDAgMCAwIC43MDcgMHoiLz48cGF0aCBkPSJNOSA4Yy0xLjgwNCAyLjcxLTMuOTcgMy40Ni02LjU4MyAzLjk0OGEuNTA3LjUwNyAwIDAgMC0uMzAyLjgxOWw3LjMyIDguODgzYTEgMSAwIDAgMCAxLjE4NS4yMDRDMTIuNzM1IDIwLjQwNSAxNiAxNi43OTIgMTYgMTUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Colour scheme</td>\n<td>Switches the colour palette for all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBvbHlnb24gcG9pbnRzPSIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzYiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Orientation</td>\n<td>Opens the rotate/flip controls, applied to all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogIDxyZWN0IHg9IjMiIHk9IjMiIHdpZHRoPSI0IiBoZWlnaHQ9IjE4IiByeD0iMSIvPgogIDxyZWN0IHg9IjEwIiB5PSIzIiB3aWR0aD0iNCIgaGVpZ2h0PSIxOCIgcng9IjEiLz4KICA8cmVjdCB4PSIxNyIgeT0iMyIgd2lkdGg9IjQiIGhlaWdodD0iMTgiIHJ4PSIxIi8+Cjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Columns</td>\n<td>Sets the number of columns in the card grid.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjEzIiByPSIzIi8+PGNpcmNsZSBjeD0iNS41IiBjeT0iNC41IiByPSIwLjgiIGZpbGw9IiMzNzQxNTEiIHN0cm9rZT0ibm9uZSIvPjxjaXJjbGUgY3g9IjgiIGN5PSI0LjUiIHI9IjAuOCIgZmlsbD0iIzM3NDE1MSIgc3Ryb2tlPSJub25lIi8+PGNpcmNsZSBjeD0iNS41IiBjeT0iNyIgcj0iMC44IiBmaWxsPSIjMzc0MTUxIiBzdHJva2U9Im5vbmUiLz48Y2lyY2xlIGN4PSI4IiBjeT0iNyIgcj0iMC44IiBmaWxsPSIjMzc0MTUxIiBzdHJva2U9Im5vbmUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Save image</td>\n<td>Downloads the full gallery grid as a single PNG.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xOCA0SDZsNiA4LTYgOGgxMiIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Aggregation method</td>\n<td>Stacked modes only. Selects how values from multiple wafers are combined per die position: Mean, Median, Std Dev, Min, Max, or Count.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDIxIEw1IDMiLz48cGF0aCBkPSJNMy41IDUgTDUgMyBMNi41IDUiLz48cGF0aCBkPSJNNSAyMSBMMjEgMjEiLz48cGF0aCBkPSJNMTkgMTkuNSBMMjEgMjEgTDE5IDIyLjUiLz48cGF0aCBkPSJNNiAyMCBDIDYgMTIsIDEwIDcsIDIwIDYiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Log scale</td>\n<td>Test Value and Stacked Test Values modes only. Applies a log\u2081\u2080 scale to the colour mapping for all cards.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjciIHg9IjMiIHk9IjMiIHJ4PSIxIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iNyIgeD0iMyIgeT0iMTQiIHJ4PSIxIi8+PHBhdGggZD0iTTE0IDRoNyIvPjxwYXRoIGQ9Ik0xNCA5aDciLz48cGF0aCBkPSJNMTQgMTVoNyIvPjxwYXRoIGQ9Ik0xNCAyMGg3Ii8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Legend style</td>\n<td>Bin modes only. Sets where the bin legend sits relative to each card.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik01IDQgTDUgMjAiLz48cGF0aCBkPSJNNSA0IEw4IDQiLz48cGF0aCBkPSJNNSAyMCBMOCAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxOSAyMCIvPjxwYXRoIGQ9Ik0xOSA0IEwxNiA0Ii8+PHBhdGggZD0iTTE5IDIwIEwxNiAyMCIvPjxwYXRoIGQ9Ik01IDEyIEwxOSAxMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Colorbar range</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNOCAydjQiLz48cGF0aCBkPSJNMTIgMnY0Ii8+PHBhdGggZD0iTTE2IDJ2NCIvPjxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgeD0iNCIgeT0iNCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMGg2Ii8+PHBhdGggZD0iTTggMTRoOCIvPjxwYXRoIGQ9Ik04IDE4aDUiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Findings</td>\n<td>Opens or closes the lot-level Findings sidebar.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTE4IDE3VjkiLz48cGF0aCBkPSJNMTMgMTdWNSIvPjxwYXRoIGQ9Ik04IDE3di0zIi8+PC9zdmc+Cg==\" width=\"20\" height=\"20\"></td>\n<td>Insights</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTAuMjkgMy44NiAxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6Ii8+PHBhdGggZD0iTTEyIDl2NCIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>Data warnings</td>\n<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>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIvPjxwYXRoIGQ9Ik0xMiAxN2guMDEiLz48L3N2Zz4K\" width=\"20\" height=\"20\"></td>\n<td>User guide</td>\n<td>Opens this guide.</td>\n</tr>\n</tbody></table>\n<p>Click a card's expand button to detach it into its own separate window with the\ncomplete single-map toolbar (falls back to a floating window inside the page if\nseparate windows aren't available in your environment). The vacated grid card\nbecomes a placeholder whose own button reattaches it; closing the detached\nwindow does the same.</p>\n<div data-wmap-demo=\"gallery\" class=\"wmap-demo\"></div><hr>\n<h2 id=\"4-interacting-with-dies\">4. Interacting with dies</h2>\n<h3 id=\"41-hover\">4.1 Hover</h3>\n<p>Hovering over a die shows a compact tooltip. It always includes the die grid\ncoordinates (x, y), and a retest count if the die was probed more than once.\nThe rest depends on the active plot mode:</p>\n<ul>\n<li><strong>Bin modes</strong> \u2014 the die's bin verdict (number and name, if named), plus a\nnote of how many test values are recorded for the die</li>\n<li><strong>Test Value mode</strong> \u2014 the active test's value in bold, flagged when it is\nout of spec, with the remaining tests summarised as "+N more tests"</li>\n<li><strong>Stacked modes</strong> \u2014 the single aggregated value or count at that position</li>\n</ul>\n<h3 id=\"42-zoom-and-pan\">4.2 Zoom and pan</h3>\n<p>Scroll to zoom in and out. Click and drag to pan when in Pan mode. The toolbar\nalso provides dedicated <strong>Zoom mode</strong> (drag to draw a zoom region), <strong>Zoom in</strong>,\n<strong>Zoom out</strong>, and <strong>Reset zoom</strong> buttons. Tooltips and die selection remain\naccurate at all zoom levels.</p>\n<h3 id=\"43-box-select\">4.3 Box select</h3>\n<p>Switch to Box select mode in the toolbar, then click and drag to draw a selection\nrectangle. The application may display statistics or details for the selected\ndies. This is useful for comparing a sub-region against the full wafer.\nUse <strong>Ctrl / Cmd + click</strong> to add individual dies to the current selection.\nPress <strong>Esc</strong> to clear.</p>\n<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\ntoolbar and drag to make your own selection, or Ctrl/Cmd + click individual dies.</em></p>\n<hr>\n<h2 id=\"5-findings-panel\">5. Findings panel</h2>\n<p>When spatial analysis has been run, the <strong>Findings</strong> panel lists statistically\ndetected patterns on the wafer. Open it from the toolbar.</p>\n<p>Each finding shows:</p>\n<ul>\n<li><strong>Severity</strong> \u2014 Unusual, Notable, or Info (ordered most to least significant)</li>\n<li><strong>Description</strong> \u2014 plain-language summary of what was detected and where</li>\n<li><strong>Click to highlight</strong> \u2014 clicking a finding highlights the affected dies on\nthe map with a black-and-white outline, visible against every colour scheme</li>\n</ul>\n<p><strong>Severity</strong> reflects how strong the statistical evidence is. <em>Unusual</em> findings\nhave both a very low adjusted p-value and a large effect size \u2014 they are reliably\nimportant. <em>Notable</em> findings are statistically significant with a meaningful\neffect but not as extreme. <em>Info</em> findings pass the significance threshold at\nlower strength and are worth reviewing but may reflect smaller or noisier patterns.</p>\n<div data-wmap-demo=\"findings\" class=\"wmap-demo\"></div><p><em>Findings panel open showing a detected edge-ring pattern. Click any row to\nhighlight the affected dies on the map.</em></p>\n<h3 id=\"finding-types\">Finding types</h3>\n<table>\n<thead>\n<tr>\n<th>Type</th>\n<th>What it indicates</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Ring</strong></td>\n<td>Yield or value difference between radial bands \u2014 e.g. centre vs edge gradient</td>\n</tr>\n<tr>\n<td><strong>Quadrant</strong></td>\n<td>Yield or value difference between N, S, E, or W quadrants</td>\n</tr>\n<tr>\n<td><strong>Sector</strong></td>\n<td>Asymmetry across finer angular slices \u2014 rotational bias or directional process variation</td>\n</tr>\n<tr>\n<td><strong>Test-site</strong></td>\n<td>Yield or value difference between parallel probe sites on the same wafer</td>\n</tr>\n<tr>\n<td><strong>Reticle position</strong></td>\n<td>Yield signature repeating at specific stepper field grid positions</td>\n</tr>\n<tr>\n<td><strong>Cluster</strong></td>\n<td>Contiguous group of failing dies denser than the background failure rate</td>\n</tr>\n<tr>\n<td><strong>Edge arc</strong></td>\n<td>Localised arc of failures near the wafer perimeter</td>\n</tr>\n<tr>\n<td><strong>Spatial pattern</strong></td>\n<td>Classification of an identified cluster shape \u2014 e.g. Donut, Scratch, Centre, Edge-localised, Random</td>\n</tr>\n</tbody></table>\n<p>Which finding types are active depends on the application's analysis\nconfiguration.</p>\n<p>When a spatial pattern classification is detected alongside supporting regional\nfindings (ring, quadrant, sector), the panel groups them together \u2014 the pattern\nclassification is the primary finding and the regional findings provide\nsupporting detail.</p>\n<hr>\n<h2 id=\"6-findings-sidebar\">6. Findings sidebar</h2>\n<p>The Findings sidebar shows detected anomalies for the current wafer or lot,\nalways docked next to the map so a clicked finding can highlight the affected\ndies right there. Open it from the toolbar. Severity, kind, and region filter\ncontrols at the top of the sidebar narrow the list down.</p>\n<div data-wmap-demo=\"summary-panel\" class=\"wmap-demo\"></div><p><em>The Findings sidebar open alongside a single wafer. Click any finding to\nhighlight the affected dies; use the filter controls to narrow by severity,\nkind, or region.</em></p>\n<p>Yield, bin breakdown, ring/quadrant regional yield, and per-test statistics \u2014\npreviously shown in this same panel \u2014 now live in the\n<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>'s Overview sub-tab instead, since that content\ndoesn't need the map on screen the way a finding's highlight does.</p>\n<p>A <strong>Summary report</strong> button (when present) opens a printable full-detail\nreport in a new window or tab, still covering everything findings-adjacent \u2014\nyield, bin breakdown, ring and quadrant statistics, per-test statistics, and\nthe findings list \u2014 and can be saved as a PDF from your browser's print\ndialog.</p>\n<h3 id=\"why-some-findings-name-two-bins\">Why some findings name two bins</h3>\n<p>A finding may read <strong>"hard bin 3 and soft bin 3 (same dies)"</strong>. That is one\ngroup of dies counted in two bin spaces, not two separate groups added together.\nHard and soft bins are independent numbering systems, so this wording appears\nonly when the two happen to cover exactly the same dies \u2014 reporting it twice\nwould look like two independent problems.</p>\n<p>For the same reason, when a single pass bin is configured you will see the\n<strong>yield</strong> finding for a region but not a separate finding for the pass bin\nitself: "pass-bin occurrence is 22 points lower" and "yield is 22 points lower"\nare the same sentence.</p>\n<p>Nothing is discarded \u2014 an application reading the findings programmatically\nstill receives every one of them.</p>\n<p>For <strong>lot-level views</strong> (gallery), the sidebar shows lot-level findings by\ndefault, with a <strong>Wafers</strong> tab listing every wafer that has its own per-wafer\nfindings \u2014 click a row to open that wafer.</p>\n<hr>\n<h2 id=\"7-lot-stack-maps\">7. Lot-stack maps</h2>\n<p>A lot-stack map combines multiple individual wafer results into a single\ncomposite view. The display clearly identifies this: the number of wafers\nincluded and the aggregation method in use are shown in the panel header\n(for example, "3 wafers \u00B7 mean") so you know you are not viewing a single\nwafer's data.</p>\n<p>Individual die coordinates are preserved. For each die grid position, results\nfrom all wafers are aggregated into a single value or bin count according to\nthe selected aggregation method.</p>\n<h3 id=\"stacked-plot-modes\">Stacked plot modes</h3>\n<p>Switching to a stacked mode changes what each die's colour represents:</p>\n<table>\n<thead>\n<tr>\n<th>Mode</th>\n<th>What the colour shows</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Stacked Hard Bins</strong></td>\n<td>For each die position, the count of wafers on which that bin appeared \u2014 one card per bin category</td>\n</tr>\n<tr>\n<td><strong>Stacked Soft Bins</strong></td>\n<td>Same as above, for soft bin categories</td>\n</tr>\n<tr>\n<td><strong>Stacked Test Values</strong></td>\n<td>For each die position, an aggregate of the test measurement across all wafers</td>\n</tr>\n</tbody></table>\n<h3 id=\"aggregation-method\">Aggregation method</h3>\n<p>In <strong>Stacked Test Values</strong> mode, use the <strong>Aggregation method</strong> toolbar button (\u03A3)\nto choose how values from each wafer are combined at each die position:</p>\n<table>\n<thead>\n<tr>\n<th>Method</th>\n<th>Result</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Mean</strong></td>\n<td>Average value across all wafers</td>\n</tr>\n<tr>\n<td><strong>Median</strong></td>\n<td>Middle value \u2014 less sensitive to outliers than mean</td>\n</tr>\n<tr>\n<td><strong>Std Dev</strong></td>\n<td>Standard deviation \u2014 shows where values vary most across the lot</td>\n</tr>\n<tr>\n<td><strong>Min</strong></td>\n<td>Lowest value seen at that position</td>\n</tr>\n<tr>\n<td><strong>Max</strong></td>\n<td>Highest value seen at that position</td>\n</tr>\n<tr>\n<td><strong>Count</strong></td>\n<td>Number of wafers with data at that position</td>\n</tr>\n</tbody></table>\n<h3 id=\"gallery-stacked-modes\">Gallery stacked modes</h3>\n<p>In a gallery, stacked modes are always available in the control bar. Switching to\na stacked mode shows one card per bin category or per test parameter, aggregated\nacross all wafers in the gallery.</p>\n<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\nbin 1 (Pass) or bin 2 (Fail) at that location.</em></p>\n<hr>\n<h2 id=\"8-insights-tab\">8. Insights tab</h2>\n<p>The <strong>Insights</strong> toolbar button (single map or gallery) swaps the wafer view\nfor a chart suite computed from the same die data \u2014 without leaving the\ntoolbar. Click it again to return to the map. Independent of the Findings\nsidebar (Section 6) \u2014 the two toggle independently, and opening one never\nhides the other's toolbar button, since Findings has nothing to highlight\nagainst once the map is replaced.</p>\n<p>Insights is organized into three sub-tabs:</p>\n<ul>\n<li><strong>Overview</strong> \u2014 a yield bar (labelled with the pass bins actually in use), a\nhard/soft bin pareto, and ring/quadrant regional yield and per-test\nmin/mean/max/spec-yield statistics.</li>\n<li><strong>Distributions</strong> \u2014 process capability (Cp/Cpk/Pp/Ppk for tests with both a\nlower and upper spec limit; tests missing a spec still appear, normalized\nonto their own range and sorted by variability), a test-value box plot, and\na value histogram. Clicking a capability box drives the box plot and\nhistogram onto that same test automatically.</li>\n<li><strong>Correlation</strong> \u2014 a test-to-test correlation matrix and a die-level scatter\nplot. Clicking a matrix cell drives the scatter plot onto that pair.</li>\n</ul>\n<p>In a gallery with more than one wafer, a <strong>Group by</strong> control appears whenever\nwafer metadata (lot, product, test program, temperature, split, or a custom\nfield) actually varies across the loaded wafers \u2014 grouping pools or restricts\neach panel differently depending on what makes sense for that chart type.\nHistogram, correlation, and scatter also offer a <strong>Wafer</strong> picker to narrow\nfrom "all wafers pooled" down to one wafer at a time. Clicking a yield bar or\nbox-plot row for one wafer opens that wafer's own map \u2014 a box-plot click opens\ndirectly on the test you were looking at.</p>\n<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,\nring/quadrant yield, and per-test statistics \u2014 all computed from this wafer's\nown dies. The Distributions sub-tab has process capability, a test-value box\nplot and histogram; Correlation has a correlation matrix with scatter plot.\nIn a gallery, Overview also gains a "Group by" control and per-wafer\nyield/box-plot rows.</em></p>\n<p><em>Gallery Insights, Overview sub-tab: lot-wide yield by wafer (click a bar to\nopen that wafer's map), hard/soft bin pareto, ring and quadrant yield, and\npooled per-test statistics. The "\u2039 Gallery" tab returns to the card grid.</em></p>\n<p><em>Distributions sub-tab: process capability (coloured by Ppk \u2014 green capable,\norange marginal, red poor; tests without spec limits are muted and dashed), a\nper-wafer test-value box plot, and a value histogram. Clicking a capability\nbox drives the box plot and histogram onto that test.</em></p>\n<p><em>Correlation sub-tab: test-to-test Pearson correlation matrix (blue =\npositive, orange = negative; intensity = strength) and a die-level scatter\nplot coloured by hard bin. Clicking a matrix cell drives the scatter plot\nonto that pair.</em></p>\n<h3 id=\"exporting-a-chart\">Exporting a chart</h3>\n<p>Every chart panel has a <strong>camera</strong> button that saves the current view as a PNG at the displayed\nresolution. To get a clean full-resolution render, use the panel's expand (corner-arrows)\nbutton first to open it in the fullscreen modal, then click the camera button.</p>\n<p>Each exported PNG includes a header strip above the chart with the panel title, source\nfilename, wafer and die counts, the active test name (where applicable), and the time of\nexport. The live card is unchanged \u2014 the header appears only in the saved file.</p>\n<hr>\n<h2 id=\"9-reticle-overlay\">9. Reticle overlay</h2>\n<p>When reticle (stepper field) geometry is configured, the <strong>Reticle grid</strong> overlay\ndraws the stepper field boundaries on the wafer. Each rectangle represents one\nexposure field from the lithography stepper \u2014 the group of dies exposed in a\nsingle step. This lets you correlate failure patterns with specific reticle\npositions \u2014 useful for identifying stepper field signatures, alignment drift, or\nmask defects.</p>\n<div data-wmap-demo=\"reticle\" class=\"wmap-demo\"></div><p>Reticle-position findings in the Findings panel highlight the specific field\npositions that show elevated failure rates. Hovering any die also shows its\n<strong>Reticle (column, row)</strong> position \u2014 its location within its own stepper\nfield \u2014 just below the die's coordinate in the tooltip.</p>\n<script>// Inline demo script for the embedded user guide window.\n// Reads the library API from window.__wmapDemoApi at call time (not at script\n// execution time) \u2014 the API is set by the caller before invoking populateGuideDemos.\n// To add a new demo: add a handler below and a <div data-wmap-demo=\"id\"> in user-guide.md.\n(function () {\n function makeDemoWafer(radius) {\n radius = radius || 7;\n var out = [];\n for (var x = -radius; x <= radius; x++) {\n for (var y = -radius; y <= radius; y++) {\n if (Math.sqrt(x * x + y * y) > radius + 0.5) continue;\n out.push({\n x: x, y: y,\n hbin: (Math.abs(x * 3 + y * 7) % 10 < 2) ? 2 : 1,\n testValues: { 1: +((x * 0.5 + y * 0.3 + 5).toFixed(3)) },\n });\n }\n }\n return out;\n }\n\n // Wafer with edge-ring failures \u2014 dies near perimeter are bin 2, interior pass.\n function makeEdgeFailWafer(radius) {\n radius = radius || 7;\n var out = [];\n for (var x = -radius; x <= radius; x++) {\n for (var y = -radius; y <= radius; y++) {\n var dist = Math.sqrt(x * x + y * y);\n if (dist > radius + 0.5) continue;\n out.push({ x: x, y: y, hbin: dist > radius - 1.8 ? 2 : 1 });\n }\n }\n return out;\n }\n\n function populateGuideDemos(root) {\n /** @type {import('../dist/index.js')} */\n var api = window.__wmapDemoApi;\n if (!api) return;\n var buildWaferMap = api.buildWaferMap;\n var renderWaferMap = api.renderWaferMap;\n var renderWaferGallery = api.renderWaferGallery;\n var analyzeWaferMap = api.analyzeWaferMap;\n\n var demos = root.querySelectorAll('[data-wmap-demo]');\n if (!demos.length) return;\n\n var results = makeDemoWafer();\n var hbinDefs = [{ bin: 1, name: 'Pass' }, { bin: 2, name: 'Fail' }];\n var testDefs = [{ testNumber: 1, name: 'Test A', unit: 'V', limitLow: 1.5, limitHigh: 8.5 }];\n\n var binResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, passBins: [1], waferConfig: { notch: { type: 'right' } }, });\n var valueResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } }, });\n\n // Every renderWaferMap/renderWaferGallery call below returns a controller\n // with its own ResizeObserver + matchMedia listeners. Collect every handle\n // so the caller (toolbar.ts's guide close paths) can destroy() them all \u2014\n // otherwise they leak for the lifetime of the host page whenever the guide\n // is shown as an in-page overlay rather than a real popup (the popup path\n // masks the leak by tearing down its own window/realm on close).\n var handles = [];\n\n for (var i = 0; i < demos.length; i++) {\n var el = demos[i];\n var id = el.dataset.wmapDemo;\n try {\n if (id === 'value-heatmap') {\n handles.push(renderWaferMap(el, valueResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'value', activeTest: 1 }\n }));\n\n } else if (id === 'spec-passfail') {\n handles.push(renderWaferMap(el, valueResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'value', activeTest: 1, passFailDisplay: 'spec' }\n }));\n\n } else if (id === 'bin-highlight') {\n // Show bin 2 highlighted (dimmed all others) so the feature is visible without interaction.\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', highlightBin: 2 }\n }));\n\n } else if (id === 'bin-map') {\n // basic hardbin map with no toolbar, just the wafer display.\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', showXYIndicator: true }\n }));\n\n } else if (id === 'orientation') {\n // Show the wafer rotated 90\u00B0 so the notch is clearly on the left side,\n // illustrating that the display orientation can be adjusted.\n\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', rotation: 90, showXYIndicator: true }\n }));\n\n } else if (id === 'overlays') {\n // Show ring boundaries, quadrant lines, and XY indicator all active.\n handles.push(renderWaferMap(el, binResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: {\n plotMode: 'hardBin',\n showRingBoundaries: true,\n showQuadrantBoundaries: true,\n showXYIndicator: true,\n }\n }));\n\n } else if (id === 'gallery') {\n if (!renderWaferGallery) {\n // Expected, not a bug: a guide opened from a single-wafer host\n // (renderWaferMap.ts's openGuideWindow) deliberately omits\n // renderWaferGallery to avoid a circular import between the two\n // render entry points \u2014 see its own doc comment. Skip this one\n // demo rather than falling into the catch below and logging a\n // scary \"failed\" warning for an intentional gap.\n continue;\n }\n var items = [0, 1, 2, 3].map(function (n) {\n var r = buildWaferMap({ results: makeDemoWafer(6 + n), hbinDefs: hbinDefs, passBins: [1] });\n return Object.assign({}, r, { label: 'Wafer ' + (n + 1) });\n });\n handles.push(renderWaferGallery(el, items));\n\n } else if (id === 'findings') {\n // Build a wafer with a strong edge-ring failure pattern so findings are guaranteed.\n var edgeResults = makeEdgeFailWafer(7);\n var edgeResult = buildWaferMap({ results: edgeResults, hbinDefs: hbinDefs, passBins: [1] });\n var summary = analyzeWaferMap ? analyzeWaferMap(edgeResult) : null;\n handles.push(renderWaferMap(el, edgeResult, {\n showToolbar: true, showTooltip: true,\n viewOptions: { plotMode: 'hardBin' },\n statsSummary: summary || undefined,\n findings: summary ? { defaultOpen: true } : undefined,\n }));\n\n } else if (id === 'lot-stack') {\n // Count how many wafers (out of 3) each die failed (bin 2) \u2014 shown as a heatmap.\n function makeLotWafer(seed) {\n var r = 7, out = [];\n for (var x = -r; x <= r; x++) {\n for (var y = -r; y <= r; y++) {\n if (Math.sqrt(x * x + y * y) > r + 0.5) continue;\n out.push({ x: x, y: y, hbin: (Math.abs(x * seed + y * (seed + 4)) % 10 < 2) ? 2 : 1 });\n }\n }\n return out;\n }\n var stackResult = buildWaferMap({\n lotStack: { results: [makeLotWafer(3), makeLotWafer(7), makeLotWafer(11)], method: 'countBin', targetBin: 2 },\n hbinDefs: hbinDefs,\n passBins: [1],\n });\n handles.push(renderWaferMap(el, stackResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'stackedBins' }\n }));\n\n } else if (id === 'box-select') {\n // Box-select is interactive \u2014 render WITH the toolbar so the box-select\n // tool is reachable, and pre-select a cluster of dies so the user sees\n // what a selection looks like before dragging their own.\n var bsResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } } });\n var bsCtrl = renderWaferMap(el, bsResult, {\n showTooltip: true,\n viewOptions: { plotMode: 'hardBin' },\n onSelect: function () { /* host app would show selection stats here */ },\n });\n handles.push(bsCtrl);\n // Highlight a 3\u00D73 block near the centre as an illustrative initial selection.\n var preSel = bsResult.dies.filter(function (d) {\n return d.x >= -1 && d.x <= 1 && d.y >= -1 && d.y <= 1;\n });\n if (bsCtrl && bsCtrl.setSelection) bsCtrl.setSelection(preSel);\n\n } else if (id === 'summary-panel') {\n // Full summary panel, opened by default, on a wafer with bins + test\n // values so yield, bin breakdown, and per-test stats are all populated.\n var spResult = buildWaferMap({ results: results, hbinDefs: hbinDefs, testDefs: testDefs, passBins: [1], waferConfig: { notch: { type: 'right' } } });\n // computePerTestStats: true adds the cheap per-test value summary to the\n // panel without the heavier regional test-value findings pass.\n var spSummary = analyzeWaferMap ? analyzeWaferMap(spResult, { computePerTestStats: true }) : null;\n handles.push(renderWaferMap(el, spResult, {\n showTooltip: true,\n viewOptions: { plotMode: 'hardBin' },\n statsSummary: spSummary || undefined,\n summaryPanel: { defaultOpen: true },\n }));\n\n } else if (id === 'analysis') {\n // renderWaferGallery is NOT necessarily available here \u2014 a guide\n // window opened from a single-map host (renderWaferMap.ts) passes\n // renderWaferGallery: undefined to avoid a circular import, so this\n // demo (unlike 'gallery' above) must use renderWaferMap, which is\n // always present regardless of which host opened the guide.\n //\n // Two parametric tests (one with spec limits, so capability has\n // something to plot) so distributions/capability/correlation/\n // scatter all have real data to show, alongside yield/bin pareto.\n var analysisTestDefs = [\n { testNumber: 1, name: 'Idsat', unit: 'A', limitLow: 1.5, limitHigh: 8.5 },\n { testNumber: 2, name: 'Vth', unit: 'V' },\n ];\n function makeAnalysisWafer(seed) {\n var r = 7, out = [];\n for (var x = -r; x <= r; x++) {\n for (var y = -r; y <= r; y++) {\n if (Math.sqrt(x * x + y * y) > r + 0.5) continue;\n out.push({\n x: x, y: y,\n hbin: (Math.abs(x * 3 + y * 7 + seed) % 10 < 2) ? 2 : 1,\n testValues: {\n 1: +((x * 0.5 + y * 0.3 + 5 + seed * 0.2).toFixed(3)),\n 2: +((x * -0.2 + y * 0.4 + 2 + seed * 0.1).toFixed(3)),\n },\n });\n }\n }\n return out;\n }\n var analysisResult = buildWaferMap({ results: makeAnalysisWafer(0), hbinDefs: hbinDefs, testDefs: analysisTestDefs, passBins: [1] });\n handles.push(renderWaferMap(el, analysisResult, {\n insights: { enabled: true },\n viewOptions: { plotMode: 'hardBin' },\n }));\n // Open the Insights tab by default \u2014 same click a user would make,\n // just pre-triggered so the feature is visible without interaction.\n var analysisBtn = el.querySelector('button[aria-label=\"Insights\"]');\n if (analysisBtn) analysisBtn.click();\n\n } else if (id === 'reticle') {\n var reticleResult = buildWaferMap({\n results: results, hbinDefs: hbinDefs, passBins: [1],\n reticleConfig: { width: 3, height: 2, anchorDie: { x: -1, y: 0 } },\n });\n handles.push(renderWaferMap(el, reticleResult, {\n showToolbar: false, showTooltip: true,\n viewOptions: { plotMode: 'hardBin', showReticle: true }\n }));\n }\n } catch (e) {\n console.warn('wmap guide demo failed:', id, e);\n }\n }\n\n // Exposed so the guide's close paths (toolbar.ts openGuideInFloatingWindow/\n // openGuideInPopup) can tear every demo down \u2014 see the `handles` comment\n // above. Guarded by identity (like __wmapDemoApi's restoreApi below) so a\n // stale/delayed close (e.g. the popup-closed poll firing after a rapid\n // reopen already overwrote this) can't destroy a newer instance's demos.\n var destroyer = function () {\n if (window.__wmapDestroyGuideDemos === destroyer) window.__wmapDestroyGuideDemos = null;\n for (var j = 0; j < handles.length; j++) {\n try { handles[j] && handles[j].destroy && handles[j].destroy(); } catch (e) { /* best-effort teardown */ }\n }\n handles = [];\n };\n window.__wmapDestroyGuideDemos = destroyer;\n }\n\n // Expose for callers \u2014 __wmapDemoApi must be set before calling:\n // - Guide window (toolbar.ts openUserGuideWindow): sets __wmapDemoApi then calls __wmapPopulateGuideDemos(guideEl)\n // - Docs site (guide-demos-init.js): sets __wmapDemoApi then calls __wmapPopulateGuideDemos(document)\n window.__wmapPopulateGuideDemos = populateGuideDemos;\n})();\n</script></div>";
|
|
2
2
|
//# sourceMappingURL=userGuideHtml.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const USER_GUIDE_HTML=`<div class="wmap-guide">
|
|
2
2
|
<style>
|
|
3
|
-
.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}
|
|
3
|
+
.wmap-guide{font-family:system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.65;color:var(--wmap-text,#1a1a1a);background:var(--wmap-surface,#fff);padding:24px 32px;max-width:var(--wmap-guide-reading-width,720px);margin:0 auto;overflow-y:auto;height:100%;box-sizing:border-box}
|
|
4
4
|
.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)}
|
|
5
5
|
.wmap-guide-version{font-size:11px;font-weight:400;color:var(--wmap-text-muted,#888);white-space:nowrap}
|
|
6
6
|
.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)}
|
|
@@ -28,7 +28,6 @@ export const USER_GUIDE_HTML=`<div class="wmap-guide">
|
|
|
28
28
|
.wmap-demo[data-wmap-demo="summary-panel"]{height:300px}
|
|
29
29
|
.wmap-demo[data-wmap-demo="box-select"]{height:280px}
|
|
30
30
|
.wmap-demo[data-wmap-demo="analysis"]{height:600px}
|
|
31
|
-
.wmap-guide--max{max-width:1000px}
|
|
32
31
|
@media print{
|
|
33
32
|
/* Print only the guide's own content, never the host page, and never a
|
|
34
33
|
clipped single screenful. The guide window opens one of two ways
|
|
@@ -59,11 +58,21 @@ export const USER_GUIDE_HTML=`<div class="wmap-guide">
|
|
|
59
58
|
/* contentWrap (flex container) and the scroll wrapper inside it both clip/scroll;
|
|
60
59
|
unclip them so the full guide paginates instead of one screenful printing. */
|
|
61
60
|
.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}
|
|
62
|
-
.wmap-guide
|
|
61
|
+
.wmap-guide{max-width:none!important;height:auto!important;overflow:visible!important;padding:0!important}
|
|
62
|
+
/* Generic counterpart to the direct .wmap-guide override above \u2014 widens
|
|
63
|
+
ANY reading column that opts into the shared --wmap-guide-reading-width
|
|
64
|
+
convention (see UserGuideExtension's doc comment), not just wmap's own,
|
|
65
|
+
without this print stylesheet needing to know a host's class names. */
|
|
66
|
+
.wmap-guide-content{--wmap-guide-reading-width:none!important}
|
|
63
67
|
.wmap-guide-online-link{display:none!important}
|
|
68
|
+
/* The combined-contents sticky bar (toolbar.ts's buildGuideToc) is a
|
|
69
|
+
screen-only navigation aid \u2014 sticky positioning is meaningless on a
|
|
70
|
+
paginated printout, and a live "Contents \u25BE / Top" bar has no useful
|
|
71
|
+
printed form, so it's dropped the same way the "view online" link is. */
|
|
72
|
+
.wmap-guide-toc{display:none!important}
|
|
64
73
|
}
|
|
65
74
|
</style>
|
|
66
|
-
<h1 id="wafer-map-user-guide">Wafer Map \u2014 User Guide<span class="wmap-guide-version" title="Built 2026-08-
|
|
75
|
+
<h1 id="wafer-map-user-guide">Wafer Map \u2014 User Guide<span class="wmap-guide-version" title="Built 2026-08-28T14:50:01.535Z">v0.26.1</span></h1>
|
|
67
76
|
<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>
|
|
68
77
|
<p>This guide describes the display and analysis features of the wafer map viewer.
|
|
69
78
|
It is written for users who may be semiconductor test engineers, device engineers, and yield engineers
|
|
@@ -140,6 +149,28 @@ displayed \u2014 the test name (and number, in spec mode), the bin type, or the
|
|
|
140
149
|
wafer count.</p>
|
|
141
150
|
<p>Clicking a bin swatch in the legend filters the display to that bin
|
|
142
151
|
(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>
|
|
152
|
+
<h3 id="15-wafers-and-dies-with-no-position-data">1.5 Wafers and dies with no position data</h3>
|
|
153
|
+
<p>Not every die necessarily has a reported grid position \u2014 some data sources supply bin or test
|
|
154
|
+
results with no X/Y coordinates at all, for some or every die on a wafer.</p>
|
|
155
|
+
<p><strong>A fully positionless wafer</strong> never renders as a map or gallery card \u2014 showing dies at
|
|
156
|
+
fabricated positions would risk being misread as real spatial layout. Instead the card shows a
|
|
157
|
+
compact summary matching the active plot mode: a <strong>bin breakdown</strong> (coloured the same as a
|
|
158
|
+
positioned card's own bin legend) for hard/soft-bin modes, or a <strong>histogram</strong> for value mode \u2014
|
|
159
|
+
coloured through the same colour scheme, log-scale, and spec/data-range settings the map itself
|
|
160
|
+
uses, so switching those in the toolbar updates the chart the same way it would a real map. A
|
|
161
|
+
<strong>View die list</strong> toggle switches to the full per-die table (position/site, hard bin, soft bin,
|
|
162
|
+
every test value) with its own CSV export; <strong>View chart</strong> switches back.</p>
|
|
163
|
+
<p><strong>A mixed wafer</strong> \u2014 some dies positioned, some not \u2014 renders its normal map for the positioned
|
|
164
|
+
dies, plus an expandable <strong>"+N dies without position data"</strong> footer beneath the card. Expanding
|
|
165
|
+
it (click the footer or its chevron) shows the same chart/die-list toggle, scoped to just the
|
|
166
|
+
unpositioned subset.</p>
|
|
167
|
+
<p>The toolbar's spatial-only controls (zoom, pan, box select, save image, orientation, overlays,
|
|
168
|
+
legend position) are hidden on a fully positionless card, since there's no map for them to act
|
|
169
|
+
on. Plot mode and colour scheme stay available \u2014 both still drive what the summary shows.</p>
|
|
170
|
+
<p>Findings that depend on physical layout \u2014 edge ring, quadrants, sectors, reticle position,
|
|
171
|
+
cluster and pattern detection \u2014 only ever consider positioned dies, so a positionless wafer
|
|
172
|
+
contributes none of these. Everything else \u2014 yield, bin counts, per-test statistics, and the
|
|
173
|
+
Insights tab's histograms/correlation/scatter \u2014 still includes every die, positioned or not.</p>
|
|
143
174
|
<hr>
|
|
144
175
|
<h2 id="2-plot-modes">2. Plot modes</h2>
|
|
145
176
|
<p>The active plot mode determines what the colour of each die represents. Use the
|
|
@@ -720,6 +751,13 @@ box drives the box plot and histogram onto that test.</em></p>
|
|
|
720
751
|
positive, orange = negative; intensity = strength) and a die-level scatter
|
|
721
752
|
plot coloured by hard bin. Clicking a matrix cell drives the scatter plot
|
|
722
753
|
onto that pair.</em></p>
|
|
754
|
+
<h3 id="exporting-a-chart">Exporting a chart</h3>
|
|
755
|
+
<p>Every chart panel has a <strong>camera</strong> button that saves the current view as a PNG at the displayed
|
|
756
|
+
resolution. To get a clean full-resolution render, use the panel's expand (corner-arrows)
|
|
757
|
+
button first to open it in the fullscreen modal, then click the camera button.</p>
|
|
758
|
+
<p>Each exported PNG includes a header strip above the chart with the panel title, source
|
|
759
|
+
filename, wafer and die counts, the active test name (where applicable), and the time of
|
|
760
|
+
export. The live card is unchanged \u2014 the header appears only in the saved file.</p>
|
|
723
761
|
<hr>
|
|
724
762
|
<h2 id="9-reticle-overlay">9. Reticle overlay</h2>
|
|
725
763
|
<p>When reticle (stepper field) geometry is configured, the <strong>Reticle grid</strong> overlay
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const WMAP_VERSION = "0.
|
|
2
|
-
export declare const WMAP_BUILD_TIME = "2026-08-
|
|
1
|
+
export declare const WMAP_VERSION = "0.26.1";
|
|
2
|
+
export declare const WMAP_BUILD_TIME = "2026-08-28T14:51:07.720Z";
|
|
3
3
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const WMAP_VERSION="0.
|
|
1
|
+
export const WMAP_VERSION="0.26.1",WMAP_BUILD_TIME="2026-08-28T14:51:07.720Z";
|