@wafertools/wafermap 0.33.0 → 0.34.0
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/AGENTS.md +6 -6
- package/CHANGELOG.md +212 -0
- package/README.md +5 -5
- package/dist/packages/canvas-adapter/chartPopulation.d.ts +15 -10
- package/dist/packages/canvas-adapter/chartPopulation.js +1 -1
- package/dist/packages/canvas-adapter/charts/barPanel.d.ts +7 -0
- package/dist/packages/canvas-adapter/charts/barPanel.js +1 -1
- package/dist/packages/canvas-adapter/charts/binCluster.d.ts +7 -1
- package/dist/packages/canvas-adapter/charts/binCluster.js +1 -1
- package/dist/packages/canvas-adapter/charts/boxplot.js +1 -1
- package/dist/packages/canvas-adapter/charts/capability.js +1 -1
- package/dist/packages/canvas-adapter/charts/chartShell.d.ts +55 -3
- package/dist/packages/canvas-adapter/charts/chartShell.js +1 -1
- package/dist/packages/canvas-adapter/charts/correlation.js +1 -2
- package/dist/packages/canvas-adapter/charts/groupedBarPlot.d.ts +2 -0
- package/dist/packages/canvas-adapter/charts/groupedBarPlot.js +1 -1
- package/dist/packages/canvas-adapter/charts/histogram.d.ts +16 -0
- package/dist/packages/canvas-adapter/charts/histogram.js +1 -1
- package/dist/packages/canvas-adapter/charts/palette.d.ts +2 -0
- package/dist/packages/canvas-adapter/charts/palette.js +1 -1
- package/dist/packages/canvas-adapter/charts/plotChart.d.ts +27 -0
- package/dist/packages/canvas-adapter/charts/plotChart.js +1 -0
- package/dist/packages/canvas-adapter/charts/pointInteractions.d.ts +45 -0
- package/dist/packages/canvas-adapter/charts/pointInteractions.js +1 -0
- package/dist/packages/canvas-adapter/charts/regionYieldDiagram.d.ts +2 -0
- package/dist/packages/canvas-adapter/charts/regionYieldDiagram.js +1 -1
- package/dist/packages/canvas-adapter/charts/scatter.d.ts +19 -0
- package/dist/packages/canvas-adapter/charts/scatter.js +1 -1
- package/dist/packages/canvas-adapter/charts/sweep.d.ts +12 -0
- package/dist/packages/canvas-adapter/charts/sweep.js +1 -1
- package/dist/packages/canvas-adapter/charts/testPassRate.d.ts +7 -0
- package/dist/packages/canvas-adapter/charts/testPassRate.js +1 -1
- package/dist/packages/canvas-adapter/charts/trend.d.ts +11 -0
- package/dist/packages/canvas-adapter/charts/trend.js +1 -1
- package/dist/packages/canvas-adapter/confirmDialog.d.ts +13 -0
- package/dist/packages/canvas-adapter/confirmDialog.js +1 -0
- package/dist/packages/canvas-adapter/dataTab.d.ts +131 -0
- package/dist/packages/canvas-adapter/dataTab.js +1 -0
- package/dist/packages/canvas-adapter/dieList.d.ts +39 -4
- package/dist/packages/canvas-adapter/dieList.js +6 -7
- package/dist/packages/canvas-adapter/drilldown.d.ts +20 -3
- package/dist/packages/canvas-adapter/drilldown.js +1 -1
- package/dist/packages/canvas-adapter/guideWindow.d.ts +96 -0
- package/dist/packages/canvas-adapter/guideWindow.js +1 -0
- package/dist/packages/canvas-adapter/identityHeader.d.ts +16 -0
- package/dist/packages/canvas-adapter/identityHeader.js +1 -1
- package/dist/packages/canvas-adapter/index.d.ts +3 -3
- package/dist/packages/canvas-adapter/index.js +1 -1
- package/dist/packages/canvas-adapter/insightsTab.d.ts +73 -54
- package/dist/packages/canvas-adapter/insightsTab.js +1 -1
- package/dist/packages/canvas-adapter/maplessSummary.d.ts +2 -2
- package/dist/packages/canvas-adapter/plotEditor.d.ts +29 -0
- package/dist/packages/canvas-adapter/plotEditor.js +1 -0
- package/dist/packages/canvas-adapter/plotItems.d.ts +32 -0
- package/dist/packages/canvas-adapter/plotItems.js +1 -0
- package/dist/packages/canvas-adapter/plotModal.d.ts +30 -0
- package/dist/packages/canvas-adapter/plotModal.js +1 -0
- package/dist/packages/canvas-adapter/plotStore.d.ts +52 -0
- package/dist/packages/canvas-adapter/plotStore.js +1 -0
- package/dist/packages/canvas-adapter/plotTab.d.ts +30 -0
- package/dist/packages/canvas-adapter/plotTab.js +1 -0
- package/dist/packages/canvas-adapter/renderWaferGallery.d.ts +3 -2
- package/dist/packages/canvas-adapter/renderWaferGallery.js +1 -1
- package/dist/packages/canvas-adapter/renderWaferMap.d.ts +21 -2
- package/dist/packages/canvas-adapter/renderWaferMap.js +1 -1
- package/dist/packages/canvas-adapter/summaryPanel.d.ts +27 -8
- package/dist/packages/canvas-adapter/summaryPanel.js +2 -4
- package/dist/packages/canvas-adapter/summaryRail.d.ts +7 -0
- package/dist/packages/canvas-adapter/summaryRail.js +1 -0
- package/dist/packages/canvas-adapter/sweepEditor.d.ts +17 -0
- package/dist/packages/canvas-adapter/sweepEditor.js +1 -0
- package/dist/packages/canvas-adapter/tableExport.d.ts +22 -0
- package/dist/packages/canvas-adapter/tableExport.js +3 -0
- package/dist/packages/canvas-adapter/toolbar.d.ts +25 -97
- 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 +337 -42
- package/dist/packages/canvas-adapter/version.d.ts +2 -2
- package/dist/packages/canvas-adapter/version.js +1 -1
- package/dist/packages/canvas-adapter/viewSwitch.d.ts +13 -0
- package/dist/packages/canvas-adapter/viewSwitch.js +1 -0
- package/dist/packages/canvas-adapter/virtualTable.d.ts +44 -0
- package/dist/packages/canvas-adapter/virtualTable.js +1 -0
- package/dist/packages/core/classify.d.ts +3 -2
- package/dist/packages/core/classify.js +1 -1
- package/dist/packages/core/passBins.d.ts +17 -4
- package/dist/packages/core/passBins.js +1 -1
- package/dist/packages/core/ringCount.d.ts +22 -0
- package/dist/packages/core/ringCount.js +1 -0
- package/dist/packages/core/tableCsv.d.ts +43 -0
- package/dist/packages/core/tableCsv.js +3 -0
- package/dist/packages/renderer/binColors.d.ts +6 -6
- package/dist/packages/renderer/binColors.js +1 -1
- package/dist/packages/renderer/buildView.d.ts +1 -1
- package/dist/packages/renderer/buildView.js +1 -1
- package/dist/packages/renderer/buildWaferMap.js +1 -1
- package/dist/packages/stats/analyzeWaferLot.js +1 -1
- package/dist/packages/stats/analyzeWaferMap.js +1 -1
- package/dist/packages/stats/binPareto.d.ts +1 -1
- package/dist/packages/stats/binPareto.js +1 -1
- package/dist/packages/stats/histogram.d.ts +27 -0
- package/dist/packages/stats/histogram.js +1 -1
- package/dist/packages/stats/index.d.ts +2 -0
- package/dist/packages/stats/index.js +1 -1
- package/dist/packages/stats/lotDrift.js +1 -1
- package/dist/packages/stats/lotPattern.js +1 -1
- package/dist/packages/stats/math.d.ts +9 -6
- package/dist/packages/stats/math.js +1 -1
- package/dist/packages/stats/patternClassification.d.ts +1 -1
- package/dist/packages/stats/patternClassification.js +1 -1
- package/dist/packages/stats/plotData.d.ts +258 -0
- package/dist/packages/stats/plotData.js +1 -0
- package/dist/packages/stats/plotId.d.ts +3 -0
- package/dist/packages/stats/plotId.js +1 -0
- package/dist/packages/stats/plotSpec.d.ts +119 -0
- package/dist/packages/stats/plotSpec.js +4 -0
- package/dist/packages/stats/presentation.d.ts +2 -0
- package/dist/packages/stats/presentation.js +1 -1
- package/dist/packages/stats/regions.d.ts +6 -0
- package/dist/packages/stats/regions.js +1 -1
- package/dist/packages/stats/renderSummaryReport.d.ts +8 -3
- package/dist/packages/stats/renderSummaryReport.js +15 -15
- package/dist/packages/stats/reportHtml.d.ts +1 -1
- package/dist/packages/stats/reportHtml.js +36 -29
- package/dist/packages/stats/scatter.d.ts +6 -0
- package/dist/packages/stats/scatter.js +1 -1
- package/dist/packages/stats/sweep.d.ts +37 -1
- package/dist/packages/stats/sweep.js +1 -1
- package/dist/packages/stats/sweepText.d.ts +14 -0
- package/dist/packages/stats/sweepText.js +1 -0
- package/dist/packages/stats/sweepXFromName.d.ts +14 -0
- package/dist/packages/stats/sweepXFromName.js +1 -1
- package/dist/packages/stats/synthesis.d.ts +14 -4
- package/dist/packages/stats/synthesis.js +1 -1
- package/dist/packages/stats/testPassRate.d.ts +6 -0
- package/dist/packages/stats/testPassRate.js +1 -1
- package/dist/packages/stats/trend.js +1 -1
- package/dist/packages/stats/types.d.ts +1 -1
- package/dist/packages/stats/yield.d.ts +15 -6
- package/dist/packages/stats/yield.js +1 -1
- package/llms.txt +15 -3
- package/package.json +3 -3
|
@@ -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);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-10-02T10:01:50.772Z\">v0.33.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, test 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. The first rotate\nor flip also switches on the <strong>XY indicator</strong> (the +X/+Y arrows in the Overlays menu), so\nyou can see which way the die coordinates now run. It stays on until you switch it off\nthere; <strong>Reset orientation</strong> leaves it as it is.</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>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>A no-data die is not a fail; 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. Passing bins are listed first,\nthen failing bins from the most dies to the fewest \u2014 the same order as the Summary\npanel and reports.</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>Limit pass/fail</strong>\nor <strong>Test pass/fail</strong> option in the Overlays menu (available when test limits are\ndefined, or a recorded verdict exists, for the active test).</p>\n<p><strong>Limit pass/fail mode</strong> replaces the colorbar with a small legend: 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 lower\nand upper test limits.</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\nlimit 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 limit pass/fail 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: every other bin is\ngreyed out. <strong>Ctrl / Cmd + click</strong> adds or removes further bins, so several can be shown\ntogether. Clicking the only bin shown again clears the filter\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-test-limits\">Test Value mode \u2014 colorbar range and test limits</h3>\n<p>When test limits are defined for the active test, two additional display options\nbecome available:</p>\n<ul>\n<li><strong>Colorbar range \u2014 Data / Limits</strong>: switches the colorbar scale between the\nactual data extent and the test limits. This affects only the colorbar's\nrange, never how failing dies are shown. In <strong>both</strong> ranges every die is\ncoloured by the gradient so you can read the value distribution, and dies\noutside the test limits are marked with a triangle \u2014 pointing <strong>down (\u25BD) for below the low limit</strong>, <strong>up (\u25B3)\nfor above the high limit</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>Limit pass/fail</strong>: when active, dies within the test limits are shown in\na pass colour and dies outside them are highlighted \u2014 <strong>blue for below the\nlow limit</strong>, <strong>red for above the high limit</strong>. Both flags apply\nindependently; a die can be flagged on either or both limits. A Pass/Fail 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 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 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<h3 id=\"derived-tests\">Derived tests (\u2020)</h3>\n<p>A test name marked <strong>\u2020</strong> in front is a <em>derived</em> test: its value was calculated\nfrom other tests on the same die \u2014 a difference, a ratio, a margin \u2014 rather\nthan measured by the tester. It behaves like any other test: you can map it,\nchart it and find patterns in it.</p>\n<p>The dagger appears wherever the test is named \u2014 the map title, tooltips, the\nplot-mode test list, Insights charts and their test pickers, findings, the\nSummary panel, the die list and reports \u2014 always in front of the name, so in a\nlist the derived tests line up in a column down the left edge. The words\n<strong>\u2020 Derived, not measured</strong> always appear nearby. Hovering over a derived\nvalue, or reading the key line under a table or findings list, shows the\nexpression it was computed from, e.g. <code>t[1020] - t[1010]</code>. The numbers in\nsquare brackets are the test numbers it reads. In a CSV export the expression\nappears in a <strong>Derived from</strong> column instead.</p>\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: axis labels, XY axis indicator, ring boundaries, quadrant lines, die coordinate labels, reticle grid (when geometry is configured), Limit pass/fail (Test Value mode with limits), Test pass/fail (Test Value mode, active test is functional or has recorded verdicts), and <strong>Mark failing dies</strong> (bin modes only). <strong>Compact layout</strong> and <strong>Layout diagnostics</strong> sit at the top of the menu (see <a href=\"#compact-layout\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'compact-layout\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Compact layout</a>). <strong>Clear overlays</strong> at the foot turns off everything in the menu at once, and is greyed when nothing is on \u2014 so the menu also answers "is anything active?" without you auditing every row.</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>Picks the colours for the map on screen. In Hard Bin and Soft Bin modes it lists <strong>bin colours</strong> (Default, Colour-blind safe); in every other mode \u2014 including the stacked modes, which show values \u2014 it lists <strong>value colours</strong>. The two are separate choices, so changing one never resets the other. Value gradients run dark at the low end and bright at the high end, so on a stacked map the healthy wafer sits back and a defect ring or scratch stands out; <strong>Reverse gradient</strong> flips that when the low end is the one you care about. When bin definitions carry their own colours, <strong>Use colours from bin definitions</strong> turns them on or off. (<strong>Mark failing dies</strong> is in Overlays, beside the pass/fail display it belongs with.)</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 test limits only. Toggles the colorbar between the <strong>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>, and <strong>Reset orientation</strong>. The first rotate or flip also switches on the XY indicator (see Overlays), which stays on until you switch it off. These change only how the wafer is drawn \u2014 die coordinates in tooltips and labels are always the original values, whatever the orientation. Reset is worth knowing about: rotation and mirroring do not combine in the order you applied them, so undoing a few clicks by clicking again does not reliably get you back \u2014 Reset does, and is greyed when you are already there.</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>). This is the mode a map opens in.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTcgMTZjMy0xIDQtOSA3LTlzMyA1IDYgNSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Chart</td>\n<td>Opens a menu of charts drawn from the selected dies, or from the whole wafer when nothing is selected (see <a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>). Only shown when there is something to chart.</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. Opening the Summary panel in it widens the modal by the panel's width, so the map keeps its size. 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. Works in the Insights view too, where it opens the whole chart suite in a wide modal \u2014 useful because those charts interact and are best read side by side. Individual charts also have their own expand button.</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 Summary panel (see <a href=\"#6-summary-panel\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'6-summary-panel\\']');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 collapse, maximize, and close buttons, and it can be dragged\nand resized by its corner grip. Collapse shrinks it to a small title strip\nwithout closing it; click the same button (now <strong>Show contents</strong>) to restore it.\nWhile the window is maximized only restore and close are shown.</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<p><strong>Bin colours</strong> \u2014 a bin's colour tells you whether it passed before you read the legend:\npassing bins are always shades of green and failing bins never are, whichever bin numbers\nyour test program uses. Each bin number keeps its colour: bin 7 is the same colour in every\nlot, every gallery and every screenshot, however many dies it holds, so you can learn your\nprogram's colours. Hard and soft bins are coloured separately, so hard bin 3 and soft bin 3\nare different colours. A colour scheme has a limited number of colours, so bins far enough\napart in number repeat one \u2014 when two of them are on screen together a <strong>Data warnings</strong>\nentry names them, and you can tell them apart with the legend, the tooltip, or by\nhighlighting one bin at a time.</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>Axis labels</strong> \u2014 the die coordinates along the bottom and left edges. They appear when you zoom; this row shows\nthem all the time, or hides them. <strong>Clear overlays</strong> returns to showing them on zoom</li>\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>Limit pass/fail</strong> \u2014 pass/fail colouring for Test Value mode, judged against the test 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=\"compact-layout\">Compact layout</h3>\n<p>On a multi-project wafer, each reticle holds only a few of your dies, so the map is mostly empty and the dies you care\nabout are small. When the occupied columns and rows repeat at a regular pitch, the Overlays menu offers\n<strong>Compact layout</strong>. Switch it on and the empty rows and columns disappear, so your dies are drawn as one grid at a\nmuch larger size, with each group of dies outlined so you can still see the reticles they came from.</p>\n<ul>\n<li><strong>Nothing is left out.</strong> Only the arrangement changes. Every die is still drawn and counted, so the legend, yield\nand statistics are the same as in the wafer view. A die that has no bin (for example one that carries metadata only)\nkeeps its place, shown in the no-data grey.</li>\n<li><strong>Coordinates stay original.</strong> Hovering a die and the axis labels give its real die coordinates, not its position\nin the compact grid.</li>\n<li><strong>Orientation.</strong> The notch marker shows the wafer orientation and follows rotation and flips. The <strong>XY indicator</strong>\nworks as it does on the wafer view, drawn in a margin beside the grid.</li>\n<li><strong>No wafer outline.</strong> The wafer circle, ring boundaries, quadrant lines and reticle grid describe the physical\nwafer, which the compact grid no longer follows, so those rows are greyed out while the layout is on.</li>\n<li><strong>Galleries.</strong> All cards share one layout, built from every wafer shown, so wafers can be compared cell for cell.\nEach card is as tall as its map needs, so more of them fit on screen; a quarter turn swaps a card's width and height.</li>\n<li><strong>Axis labels.</strong> With the Axis labels row on, the first column of each group of dies is labelled with its real die\ncoordinate, which marks the reticle boundaries; zoom in far enough and every die is labelled.</li>\n<li><strong>When it is offered.</strong> The layout is offered when the occupied columns and rows repeat. If you supply\n<code>reticleConfig</code>, it is offered when they repeat at the reticle width and height or a multiple of it (a product on every second reticle repeats at twice the width). Random missing dies do not repeat, so\na wafer that merely has holes is not offered it. Developers can switch it on regardless with\n<code>viewOptions: { compact: true }</code>.</li>\n</ul>\n<p><strong>Layout diagnostics</strong> (also in the Overlays menu) shows what the detector saw as counts and scores only: it holds no\ndie positions, bins, test values or wafer names. If a layout is not recognised the way you expect, copy the text or save\nit as a file and send it to whoever supports this software.</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>Right-click</strong>, <strong>Menu key</strong> or <strong>Shift + F10</strong></td>\n<td>Chart the selected dies, or the whole wafer (see <a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>)</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>Picks bin colours (bin modes) or value colours (other modes) for all cards, including <strong>Reverse gradient</strong>.</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. <strong>Auto</strong> fits as many cards as stay readable; a number divides the full width between that many columns.</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><strong>Legend on each map</strong> adds a legend to every card as well as the shared one above the grid (off by default). While it is on, bin modes also let you choose where that legend sits on 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 test limits only. Toggles all cards between the limit range and the data range. Leave it on the test 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>Summary panel</td>\n<td>Opens or closes the Summary panel covering every wafer in the gallery.</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 chart suite covering every wafer \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 wafers shown. Collected across every wafer and de-duplicated, so a problem affecting all of them 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>Right-click a card anywhere outside its map to chart that wafer on its own \u2014 a\nhistogram, process capability or a sweep (see\n<a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>).</p>\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\noutside the test limits, 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. To pan, hold <strong>Space</strong> and drag, use the arrow keys,\nor choose Pan mode in the toolbar so that a plain drag pans. The toolbar also\nprovides 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>Click and drag on the map to draw a selection rectangle \u2014 Box select is the mode\na map opens in. Click a die to select just that die, and click it again to clear\nit. The application may display statistics or details for the selected dies.\nThis is useful for comparing a sub-region against the full wafer.</p>\n<p>Selected dies keep their full colour and every other die is faded, with an\noutline round the selection, so it is clear which dies are selected whatever\ntheir shape \u2014 a block, a ring or scattered dies. A finding highlighted from the\nSummary panel is shown the same way.</p>\n<p>Use <strong>Ctrl / Cmd + click</strong> to add or remove individual dies. Press <strong>Esc</strong>, or\nclick outside the wafer, to clear the selection.</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. Drag on the map to make\nyour own selection, or Ctrl/Cmd + click individual dies.</em></p>\n<h3 id=\"44-charting-dies-and-wafers\">4.4 Charting dies and wafers</h3>\n<p><strong>Right-click</strong> a population to open a menu of charts drawn from just those\ndies. Picking one opens it in a window over the map. This is how you look at a\ncluster, a scratch or an edge region on its own, or at one wafer out of a lot.</p>\n<p>What you right-click decides the population:</p>\n<ul>\n<li><strong>Selected dies</strong> \u2014 select some dies, then right-click on the map. Right-\nclicking a die that is <strong>not</strong> selected selects that die alone first;\nright-clicking a selected die, or empty space, keeps the selection.</li>\n<li><strong>A whole wafer</strong> \u2014 right-click empty map space with nothing selected, a\ngallery card anywhere outside its map (its header, the space around the map),\nor one wafer's bar, box or point in an Insights chart (<em>Yield by wafer</em>,\n<em>Test value distribution</em>, <em>Wafer-to-wafer trend</em> \u2014 their tooltips say\n"right-click to chart this wafer").</li>\n</ul>\n<p>On the map you can also press the <strong>Menu</strong> key or <strong>Shift + F10</strong>, or use the\n<strong>Chart</strong> toolbar button, which charts the selection when there is one and the\nwafer otherwise.</p>\n<p>The menu offers:</p>\n<ul>\n<li><strong>Value histogram</strong> \u2014 one test's distribution, opening on the test the map\nis showing.</li>\n<li><strong>Process capability</strong> \u2014 every test normalised to its spec limits, or its\ntest limits when it has none, with its\nPpk. Below 30 dies the chart says each Ppk is a rough estimate: a Ppk from a\nhandful of dies can be far from the process's real capability.</li>\n<li><strong>Sweeps</strong> your application has defined (see <a href=\"#sweep-cards\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'sweep-cards\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Sweep cards</a>).</li>\n</ul>\n<p>What every chart opened this way does:</p>\n<ul>\n<li>It states its population \u2014 how many dies and which wafer they came from \u2014 in\nits title and above the plot, so it cannot be mistaken for a chart of the\nwhole lot. Partial and edge-excluded dies are left out, as they are\neverywhere else, and the chart says how many that was.</li>\n<li>It is a <strong>snapshot</strong>: changing the selection afterwards does not change a\nchart that is already open.</li>\n<li>A chart that cannot be drawn from the population stays in the menu, greyed,\nwith the reason \u2014 for instance when none of the dies has values for its tests,\nor when the map is a lot stack, whose dies are averages across wafers rather\nthan measured dies.</li>\n</ul>\n<p>A map with only bin data and no sweeps has nothing to chart, and right-click\nthere does what it normally does.</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 Minor (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 fades the rest of the wafer and outlines the\naffected dies. A finding about a bin also filters the legend to that bin, so the legend\nalways names what the finding describes; a finding about yield or a test clears the\nfilter. Changing the selection or the legend filter yourself releases the finding.</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-summary-panel\">6. Summary panel</h2>\n<p>The Summary panel docks next to the map and gives you the wafer or lot at a\nglance, with findings sitting directly under the headline numbers so a clicked\nfinding can highlight the affected dies right there. Open it from the toolbar.</p>\n<div data-wmap-demo=\"summary-panel\" class=\"wmap-demo\"></div><p><em>The Summary panel open alongside a single wafer. Click any finding to\nhighlight the affected dies.</em></p>\n<p>Sections, top to bottom:</p>\n<ul>\n<li><strong>Summary</strong> \u2014 die and wafer counts, yield, and the population the rest of the\npanel is computed over. For several wafers the heading names them: <strong>Lot\nLOT123 \u00B7 13 wafers</strong> when every wafer comes from that one lot, otherwise\n<strong>26 wafers from 2 lots</strong> (or just <strong>13 wafers</strong> when the data records no lot).\nThe panel only says "lot" when it really is one lot. "Mean per-wafer yield" is an\n<em>unweighted</em> mean of each wafer's own yield; it is deliberately not the same\nstatistic as the bin breakdown's pass-bin share, which weights every die\nequally. The two agree only when die counts are even across the wafers.</li>\n<li><strong>What stands out</strong> \u2014 the headline (the yield, and for a lot its spread across\nwafers), then up to three items ranked by how many dies each costs, an "also"\nline for any others over a yield point, and a line saying what was compared. An\nitem names a region, a wafer or a test and, for a region, the failing bins that make up\nits shortfall; a test is an item when it is outside its limits (or a functional test\nfails) on a share of the dies that clears the same floor. Its three dots and word (High, Moderate or Low impact) say how\nmuch of the lot it costs: the higher of its share of all the dies (2% moderate, 4% high)\nand its share of the dies that fail (15% moderate, 40% high), so a small area that is most\nof a good lot's loss still reads as high. Click a name to highlight that finding on the map.\nA <strong>Watch</strong> line (at most two) follows for things that cost no dies yet: a lot of five or more\nwafers whose yield, or a test's mean, trends up or down across the wafers <em>in the order given</em>\n(said as "input order": the order is only a physical one if you know it is), and a test whose\nPpk against its limits is under 1.0.\nA wafer or lot with nothing over a yield point says so: "Nothing stands out".\nThe reports open with the same section, and <strong>Full report</strong> at the foot of it opens the\nreport; in a report opened from the panel, clicking a finding's row shows it on the map.</li>\n<li><strong>Findings</strong> \u2014 detected anomalies, most severe first, each group marked with\nthree dots filled by severity (Unusual, Notable, Minor). Severity chips narrow\nthe list; Kind and Region dropdowns appear once there are enough findings to\nbe worth narrowing. <strong>Detail</strong> opens the same sentences above a readable list.</li>\n<li><strong>Bin breakdown</strong> \u2014 bars as a share of dies, pass bins first and then failing\nbins by descending count, so the dominant failure mode is at the top. It\nfollows the map's plot mode: a soft-bin map gets a soft-bin breakdown. When a\nwafer carries both bin types, a <strong>Hard / Soft</strong> selector in the section header\noverrides that.</li>\n<li><strong>Region yield</strong> \u2014 ring yield by default, with a <strong>Ring / Quadrant</strong> selector.\nEach row prints its difference from the wafer's yield in points and is tinted\nwhen it is 1, 2 or 4 or more points below it (nothing above is tinted).\nRing is the default because edge roll-off is the pattern that dominates real\nwafer maps; a genuinely asymmetric quadrant is reported as a finding above,\nwith a significance test behind it.</li>\n<li><strong>Wafer yield</strong> (several wafers only) \u2014 one bar per wafer with the median\nmarked, each row's difference from the median in points, and a tint when it is\n1, 2 or 4 or more points below it. Wafers are in slot order by default, since that is what makes a\nslot-correlated pattern visible; a <strong>Slot / Yield</strong> selector re-sorts. Wafers\nwell below or above the rest are labelled "low outlier" or "high outlier"\n(3 or more wafers, and at least 3 points from the median \u2014 the same rule as the\noutlier-wafer findings).</li>\n<li><strong>Test values</strong> \u2014 per test: mean, <strong>Ppk</strong>, and limit yield. Ppk (not Cpk)\nbecause it measures against the <em>overall</em> spread, including wafer-to-wafer\nvariation, which is what the dies actually ship against. The full descriptive\nstatistics \u2014 min, quartiles, median, max, \u03C3, both test limits, and all four\ncapability indices \u2014 are in the CSV export, and the wafer summary report shows\nN, min, quartiles, median, mean, max, \u03C3 and limit yield (a lot's report has N, min, mean,\nmax, \u03C3 and limit yield: quartiles cannot be combined from each wafer's own). Both reports\nalso carry the full Cp, Cpk, Pp and Ppk table.</li>\n<li><strong>Functional tests</strong> \u2014 pass/fail counts and pass rate per functional test.</li>\n</ul>\n<p>Every section header can be collapsed, and stays collapsed as the panel\nre-renders.</p>\n<p>A <strong>Summary report</strong> button (when present) opens a printable full-detail\nreport \u2014 yield, bin breakdown, ring and quadrant statistics, the full per-test\ntable with Cp/Cpk/Pp/Ppk, and the findings list \u2014 and can be saved as a PDF\nfrom your browser's print dialog. It opens with <strong>What stands out</strong>: the yield,\nup to three regions, fail bins or wafers ranked by how many dies each costs, and a\nline saying what was compared. An item is listed only when it costs at least one\nyield point of the dies analysed; a lot with none says so. Each figure links to its\nrow in the Findings table below. Severity is drawn as three dots and a word, so it reads in a\nblack-and-white print; yields carry a bar, and a wafer or region is tinted only when it is\nat least a point below the rest.</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 and soft bin 3 (Fail) (same dies)"</strong>. That is one\ngroup of dies counted in two bin spaces, not two separate groups added together.\n(When the two bins carry different names, both are spelled out in full.)\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 panel shows lot-level findings, and the\n<strong>Wafer Yield</strong> section badges each wafer with its own findings count \u2014 click a\nrow to open that wafer. There is no separate wafers tab: every wafer appears in\nthat one list, including the ones with no findings, which is what lets you see a\nlow-yielding wafer that nothing flagged.</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>Any chart mark that stands for one wafer \u2014 a bar in <em>Yield by wafer</em>, a box in\n<em>Test value distribution</em>, a point in <em>Wafer-to-wafer trend</em> \u2014 can be\nright-clicked to chart that wafer on its own (see\n<a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>); its tooltip says so.</p>\n<p>Insights is organised into three sub-tabs, plus a fourth, <strong>Sweeps</strong>, when\nthe application has defined any sweeps (see <em>Sweep cards</em> below):</p>\n<ul>\n<li><p><strong>Overview</strong> \u2014 a <strong>test pass rate</strong> chart showing which test fails most (and,\nwith "Group by" active, whether it fails more in one split than another). It\noffers up to three ways of judging, whichever the data supports: <strong>Spec\nlimits</strong> (the value against its limits), <strong>Tester flag</strong> (the pass/fail the\ntester itself recorded, which a parametric test carries whether or not limits\nwere exported), and <strong>Functional</strong> for pass/fail-only tests. The two\nparametric views can disagree \u2014 guard bands and dynamic limits routinely cause\nit \u2014 so the card reports how many dies the two judged differently rather than\npicking one for you. Alongside it, headline tiles stating the population (wafers, dies analysed,\nand for a lot the mean wafer yield \u2014 an <em>unweighted</em> mean of each wafer's own\nyield, not the die-weighted figure), a yield bar labelled with the pass bins\nactually in use and marked with the median, a hard/soft bin pareto, and\nring/quadrant regional yield plus the full per-test statistics table.</p>\n</li>\n<li><p><strong>Distributions</strong> \u2014 process capability (Cp/Cpk/Pp/Ppk for tests with both a\nlower and upper limit \u2014 spec limits where given, otherwise test limits; tests\nwithout both still appear, normalized\nonto their own range and sorted by variability), a test-value box plot, a\nvalue histogram, and a <strong>wafer-to-wafer trend</strong> \u2014 one point per wafer at its\nmean, \u00B11\u03C3 whiskers, the mean of all wafers dashed across (labelled the "lot\nmean" when they all come from one lot), and the test's limits. The trend is always in slot order, deliberately: drift across\na cassette only reads in the physical sequence, so there is no sort control\nto destroy it. Clicking a capability box drives the box plot, histogram and\ntrend onto that same test automatically.</p>\n<p>The box plot, histogram, trend and the Correlation tab's scatter draw the\ntest's limits as dashed lines. A test can have two kinds: <strong>test limits</strong>\n(labelled <em>Lo limit</em> / <em>Hi limit</em>, short dashes) \u2014 what each die was judged\npass/fail by \u2014 and <strong>spec limits</strong> (labelled <em>LSL</em> / <em>USL</em>, long dashes) \u2014\nthe process specification that capability is measured against. When a test\nhas both, a <strong>Limits</strong> choice appears \u2014 <em>Test + spec</em> (the default), <em>Test\nlimits</em>, <em>Spec limits</em> or <em>None</em> \u2014 and it applies to all four charts at\nonce. A test that lacks the kind you chose shows the kind it has, so it\nnever looks as if it had no limits; a limit that falls outside the plotted\nrange is marked at the edge of the chart with an arrow.</p>\n<p>The box plot, histogram and trend share one row of axis controls, kept in\nsync across all three so switching between them never re-reads the same\ndata on a different scale: <strong>Axis includes limits</strong> widens the axis to cover\nevery limit shown even where the data sits well clear of them (on by default only when\ndoing so still leaves the data at least a third of the axis \u2014 otherwise a\ngenerous limit window would squash a perfectly capable distribution into a\nsliver), and <strong>Clip outliers</strong> narrows the axis to a robust range (the\nTukey fence, 1.5\u00D7 IQR beyond Q1/Q3) so a handful of extreme values don't\nstretch the axis until the rest of the distribution reads as a flat line.\nClipping affects the AXIS only \u2014 every reported statistic (mean, \u03C3, Cpk,\nthe box's own five-number summary) is computed from every value; nothing is\nexcluded from the numbers, and the panel states how many points sit outside\nthe visible range when some do. The box plot additionally has its own\n<strong>Log scale</strong> toggle, independent of the shared pair above (available once\nevery plotted value is positive) \u2014 the histogram and trend charts do not\noffer one.</p>\n</li>\n<li><p><strong>Correlation</strong> \u2014 a test-to-test correlation matrix and a die-level scatter\nplot, both stating the sample size the coefficients are computed over.\nClicking a matrix cell drives the scatter plot onto that pair, where <code>r</code> and\n<code>n</code> for that pair are printed and update as you filter the legend.</p>\n</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 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=\"sweep-cards\">Sweep cards</h3>\n<p>A <strong>sweep</strong> appears in its own <strong>Sweeps</strong> sub-tab when your application has\ndefined one. It exists for a test program that measures the same quantity at a\nseries of drive levels and records each level as its own test number \u2014 often one\nblock sweeping up and another sweeping down. Read one test at a time that is a\nrow of unrelated distributions; read as a sweep it is a pair of response curves,\nand the card measures the pair.</p>\n<p><strong>Each line is the population median, with a shaded p10\u2013p90 band</strong> \u2014 not one\ntrace per die. A lot is thousands of dies, so per-die traces would be a solid\nblock of ink. The band is the spread across the dies currently in scope, so a\nband that widens at one end of the sweep is telling you the population disagrees\nmost at that level.</p>\n<p><strong>The dies behind it are whatever Insights is scoped to.</strong> A sweep names tests,\nnot dies \u2014 so the group or wafer selected in the panels above it decides the\npopulation, and the card's die count states what that came to. To sweep a\nhand-picked set of dies instead, select them on a map and right-click (see\n<a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>).</p>\n<p>Two measurements are drawn on the plot and restated underneath:</p>\n<ul>\n<li><strong>Crossing</strong> \u2014 where the first two curves meet. If they cross more than once\nthe card says so rather than reporting the first as though it were the only\none.</li>\n<li><strong>Separation</strong> \u2014 the horizontal distance between the two curves at the levels\nthe application asked about. With one curve rising and one falling the pair\ntraces a V, and this is the width of that V. A level that one of the curves\nnever reaches reads <strong>not measurable</strong>, naming the curve \u2014 never <code>0</code>, which\nwould read as "they meet here".</li>\n</ul>\n<p>Only the <strong>first two</strong> curves are measured. Any further ones are drawn for\ncontext.</p>\n<p><strong>The x axis is the sweep, not the lot</strong> \u2014 that is what distinguishes this card\nfrom the wafer-to-wafer trend, which walks one test across wafers. If the\napplication supplied the real swept quantity, the axis is in those units (dBm,\nvolts, \u00B0C) and the crossing is reported in them. If it did not, the axis is the\nposition in the sequence, labelled by test, because test numbers are identifiers\n\u2014 treating them as a scale would invent spacing the data never claimed.</p>\n<p>Some sweeps step by multiples \u2014 thresholds of 1k, 2k, 5k \u2026 1M \u2014 and are drawn\non a <strong>logarithmic</strong> x axis, so each step gets the same room. There the crossing\nis found along the log axis, and a width is given as a <strong>ratio</strong> between the two\ncurves, with the level each reaches: <em>\u00D72.49 (15.9 k\u03A9 \u2192 39.7 k\u03A9)</em>. On a log axis\nthe same shift is the same multiple anywhere along it, which a difference in \u03A9\nwould hide.</p>\n<p>The card footer reports anything that limits what you are seeing: tests in the\nsweep that have no definition, functional (pass/fail) tests inside a sweep,\nwhich have no value to plot, and series whose tests carry different units.</p>\n<p>If the swept values no longer line up with the tests \u2014 usually because a test in\nthe sweep is missing from this data \u2014 the footer lists the tests it did find, and\nthe card is drawn in test order with <strong>the crossing and widths not measured</strong>.\nPairing the remaining values with the remaining tests would put every later point\nat the wrong level, which gives a plausible curve and a wrong crossing.</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>The saved image is the chart as shown, on a white background. It carries no title or\ncontext of its own, but its file name identifies the lot, wafers and chart (see below).</p>\n<h3 id=\"names-of-saved-files\">Names of saved files</h3>\n<p>Every image and CSV you save is named for what it shows: the lot, then the wafer (or how many\nwafers), then the content. For example, <code>LOT123_W05_hard-bin.png</code>, <code>LOT123_W05_die-list.csv</code> or\n<code>LOT123_25-wafers_yield-by-wafer.png</code>. Saving the same export from different wafers gives\ndifferent names, so files don't overwrite each other or need renaming. A part is left out when\nthe data doesn't have it, for example a wafer with no ID. Your application may choose its own\nname for map images instead.</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 (guideWindow.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-10-06T09:21:15.198Z\">v0.34.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, test 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 above the map, at the right of its title row \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. The first rotate\nor flip also switches on the <strong>XY indicator</strong> (the +X/+Y arrows in the Overlays menu), so\nyou can see which way the die coordinates now run. It stays on until you switch it off\nthere; <strong>Reset orientation</strong> leaves it as it is.</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>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>A no-data die is not a fail; 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. Passing bins are listed first,\nthen failing bins from the most dies to the fewest \u2014 the same order as the Summary\npanel and reports.</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>Limit pass/fail</strong>\nor <strong>Test pass/fail</strong> option in the Overlays menu (available when test limits are\ndefined, or a recorded verdict exists, for the active test).</p>\n<p><strong>Limit pass/fail mode</strong> replaces the colorbar with a small legend: 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 lower\nand upper test limits.</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\nlimit 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 limit pass/fail 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: every other bin is\ngreyed out. <strong>Ctrl / Cmd + click</strong> adds or removes further bins, so several can be shown\ntogether. Clicking the only bin shown again clears the filter\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-test-limits\">Test Value mode \u2014 colorbar range and test limits</h3>\n<p>When test limits are defined for the active test, two additional display options\nbecome available:</p>\n<ul>\n<li><strong>Colorbar range \u2014 Data / Limits</strong>: switches the colorbar scale between the\nactual data extent and the test limits. This affects only the colorbar's\nrange, never how failing dies are shown. In <strong>both</strong> ranges every die is\ncoloured by the gradient so you can read the value distribution, and dies\noutside the test limits are marked with a triangle \u2014 pointing <strong>down (\u25BD) for below the low limit</strong>, <strong>up (\u25B3)\nfor above the high limit</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>Limit pass/fail</strong>: when active, dies within the test limits are shown in\na pass colour and dies outside them are highlighted \u2014 <strong>blue for below the\nlow limit</strong>, <strong>red for above the high limit</strong>. Both flags apply\nindependently; a die can be flagged on either or both limits. A Pass/Fail 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 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 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<h3 id=\"derived-tests\">Derived tests (\u2020)</h3>\n<p>A test name marked <strong>\u2020</strong> in front is a <em>derived</em> test: its value was calculated\nfrom other tests on the same die \u2014 a difference, a ratio, a margin \u2014 rather\nthan measured by the tester. It behaves like any other test: you can map it,\nchart it and find patterns in it.</p>\n<p>The dagger appears wherever the test is named \u2014 the map title, tooltips, the\nplot-mode test list, Insights charts and their test pickers, findings, the\nSummary panel, the die list and reports \u2014 always in front of the name, so in a\nlist the derived tests line up in a column down the left edge. The words\n<strong>\u2020 Derived, not measured</strong> always appear nearby. Hovering over a derived\nvalue, or reading the key line under a table or findings list, shows the\nexpression it was computed from, e.g. <code>t[1020] - t[1010]</code>. The numbers in\nsquare brackets are the test numbers it reads. In a CSV export the expression\nappears in a <strong>Derived from</strong> column instead.</p>\n<h2 id=\"3-toolbar-controls\">3. Toolbar controls</h2>\n<p>The toolbar sits above the map, at the right of its title row (each card in a gallery has its own), 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: axis labels, XY axis indicator, ring boundaries, quadrant lines, die coordinate labels, reticle grid (when geometry is configured), Limit pass/fail (Test Value mode with limits), Test pass/fail (Test Value mode, active test is functional or has recorded verdicts), and <strong>Mark failing dies</strong> (bin modes only). <strong>Compact layout</strong> and <strong>Layout diagnostics</strong> sit at the top of the menu (see <a href=\"#compact-layout\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'compact-layout\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Compact layout</a>). <strong>Clear overlays</strong> at the foot turns off everything in the menu at once, and is greyed when nothing is on \u2014 so the menu also answers "is anything active?" without you auditing every row.</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>Picks the colours for the map on screen. In Hard Bin and Soft Bin modes it lists <strong>bin colours</strong> (Default, Colour-blind safe); in every other mode \u2014 including the stacked modes, which show values \u2014 it lists <strong>value colours</strong>. The two are separate choices, so changing one never resets the other. Value gradients run dark at the low end and bright at the high end, so on a stacked map the healthy wafer sits back and a defect ring or scratch stands out; <strong>Reverse gradient</strong> flips that when the low end is the one you care about. When bin definitions carry their own colours, <strong>Use colours from bin definitions</strong> turns them on or off. (<strong>Mark failing dies</strong> is in Overlays, beside the pass/fail display it belongs with.)</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 test limits only. Toggles the colorbar between the <strong>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>, and <strong>Reset orientation</strong>. The first rotate or flip also switches on the XY indicator (see Overlays), which stays on until you switch it off. These change only how the wafer is drawn \u2014 die coordinates in tooltips and labels are always the original values, whatever the orientation. Reset is worth knowing about: rotation and mirroring do not combine in the order you applied them, so undoing a few clicks by clicking again does not reliably get you back \u2014 Reset does, and is greyed when you are already there.</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>). This is the mode a map opens in.</td>\n</tr>\n<tr>\n<td><img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzNzQxNTEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMyAzdjE4aDE4Ii8+PHBhdGggZD0iTTcgMTZjMy0xIDQtOSA3LTlzMyA1IDYgNSIvPjwvc3ZnPgo=\" width=\"20\" height=\"20\"></td>\n<td>Chart</td>\n<td>Opens a menu of charts drawn from the selected dies, or from the whole wafer when nothing is selected (see <a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>). Only shown when there is something to chart.</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. Opening the Summary panel in it widens the modal by the panel's width, so the map keeps its size. 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. Works in the Insights view too, where it opens the whole chart suite in a wide modal \u2014 useful because those charts interact and are best read side by side. Individual charts also have their own expand button.</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 Summary panel (see <a href=\"#6-summary-panel\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'6-summary-panel\\']');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 collapse, maximize, and close buttons, and it can be dragged\nand resized by its corner grip. Collapse shrinks it to a small title strip\nwithout closing it; click the same button (now <strong>Show contents</strong>) to restore it.\nWhile the window is maximized only restore and close are shown.</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<p><strong>Bin colours</strong> \u2014 a bin's colour tells you whether it passed before you read the legend:\npassing bins are always shades of green and failing bins never are, whichever bin numbers\nyour test program uses. Each bin number keeps its colour: bin 7 is the same colour in every\nlot, every gallery and every screenshot, however many dies it holds, so you can learn your\nprogram's colours. Hard and soft bins are coloured separately, so hard bin 3 and soft bin 3\nare different colours. A colour scheme has a limited number of colours, so bins far enough\napart in number repeat one \u2014 when two of them are on screen together a <strong>Data warnings</strong>\nentry names them, and you can tell them apart with the legend, the tooltip, or by\nhighlighting one bin at a time.</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>Axis labels</strong> \u2014 the die coordinates along the bottom and left edges. They appear when you zoom; this row shows\nthem all the time, or hides them. <strong>Clear overlays</strong> returns to showing them on zoom</li>\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>Limit pass/fail</strong> \u2014 pass/fail colouring for Test Value mode, judged against the test 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=\"compact-layout\">Compact layout</h3>\n<p>On a multi-project wafer, each reticle holds only a few of your dies, so the map is mostly empty and the dies you care\nabout are small. When the occupied columns and rows repeat at a regular pitch, the Overlays menu offers\n<strong>Compact layout</strong>. Switch it on and the empty rows and columns disappear, so your dies are drawn as one grid at a\nmuch larger size, with each group of dies outlined so you can still see the reticles they came from.</p>\n<ul>\n<li><strong>Nothing is left out.</strong> Only the arrangement changes. Every die is still drawn and counted, so the legend, yield\nand statistics are the same as in the wafer view. A die that has no bin (for example one that carries metadata only)\nkeeps its place, shown in the no-data grey.</li>\n<li><strong>Coordinates stay original.</strong> Hovering a die and the axis labels give its real die coordinates, not its position\nin the compact grid.</li>\n<li><strong>Orientation.</strong> The notch marker shows the wafer orientation and follows rotation and flips. The <strong>XY indicator</strong>\nworks as it does on the wafer view, drawn in a margin beside the grid.</li>\n<li><strong>No wafer outline.</strong> The wafer circle, ring boundaries, quadrant lines and reticle grid describe the physical\nwafer, which the compact grid no longer follows, so those rows are greyed out while the layout is on.</li>\n<li><strong>Galleries.</strong> All cards share one layout, built from every wafer shown, so wafers can be compared cell for cell.\nEach card is as tall as its map needs, so more of them fit on screen; a quarter turn swaps a card's width and height.</li>\n<li><strong>Axis labels.</strong> With the Axis labels row on, the first column of each group of dies is labelled with its real die\ncoordinate, which marks the reticle boundaries; zoom in far enough and every die is labelled.</li>\n<li><strong>When it is offered.</strong> The layout is offered when the occupied columns and rows repeat. If you supply\n<code>reticleConfig</code>, it is offered when they repeat at the reticle width and height or a multiple of it (a product on every second reticle repeats at twice the width). Random missing dies do not repeat, so\na wafer that merely has holes is not offered it. Developers can switch it on regardless with\n<code>viewOptions: { compact: true }</code>.</li>\n</ul>\n<p><strong>Layout diagnostics</strong> (also in the Overlays menu) shows what the detector saw as counts and scores only: it holds no\ndie positions, bins, test values or wafer names. If a layout is not recognised the way you expect, copy the text or save\nit as a file and send it to whoever supports this software.</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>Right-click</strong>, <strong>Menu key</strong> or <strong>Shift + F10</strong></td>\n<td>Chart the selected dies, or the whole wafer (see <a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>)</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>Picks bin colours (bin modes) or value colours (other modes) for all cards, including <strong>Reverse gradient</strong>.</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. <strong>Auto</strong> fits as many cards as stay readable; a number divides the full width between that many columns.</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>Select on every wafer</td>\n<td>A toggle. Off (the default), each card selects on its own. A badge counts the selected die positions; clicking the button while something is selected clears it. On, a box, a click or a clear on any card applies to every card at the same die positions, so a region is read lot-wide; right-click then opens charts and tables of those dies across all the wafers (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,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><strong>Legend on each map</strong> adds a legend to every card as well as the shared one above the grid (off by default). While it is on, bin modes also let you choose where that legend sits on 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 test limits only. Toggles all cards between the limit range and the data range. Leave it on the test 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>Summary panel</td>\n<td>Opens or closes the Summary panel covering every wafer in the gallery.</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 wafers shown. Collected across every wafer and de-duplicated, so a problem affecting all of them 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>Right-click a card anywhere outside its map to chart that wafer on its own \u2014 a\nhistogram, process capability or a sweep (see\n<a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>).</p>\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\noutside the test limits, 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. To pan, hold <strong>Space</strong> and drag, use the arrow keys,\nor choose Pan mode in the toolbar so that a plain drag pans. The toolbar also\nprovides 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>Click and drag on the map to draw a selection rectangle \u2014 Box select is the mode\na map opens in. Click a die to select just that die, and click it again to clear\nit. The application may display statistics or details for the selected dies.\nThis is useful for comparing a sub-region against the full wafer.</p>\n<p>Selected dies keep their full colour and every other die is faded, with an\noutline round the selection, so it is clear which dies are selected whatever\ntheir shape \u2014 a block, a ring or scattered dies. A finding highlighted from the\nSummary panel is shown the same way.</p>\n<p>Use <strong>Ctrl / Cmd + click</strong> to add or remove individual dies. Press <strong>Esc</strong>, or\nclick outside the wafer, to clear the selection.</p>\n<p><strong>In a gallery</strong>, each card selects on its own unless you turn on <strong>Select on every\nwafer</strong> in the toolbar. Then a selection made on one card is made at the same die\npositions on every card \u2014 draw a box round the edge ring, a scratch zone or a\nreticle corner once, and see that region on all the wafers. Right-click (or use\nthe <strong>Chart</strong> menu) and the charts and tables open on those dies across the whole\nlot: <strong>Dies</strong>, <strong>Test statistics</strong> and a <strong>Wafers</strong> table with one row per wafer,\neach stating "selected at the same die positions on N wafers".</p>\n<p><strong>Pick whole wafers instead</strong> with <strong>Ctrl / Cmd + click</strong> on a card's header: the card is\noutlined and the toolbar counts "N wafers picked \u2715" (click it to clear). Right-click\none of the picked cards and the charts and tables open on every die of every picked\nwafer, with a <strong>Wafers</strong> table. Dies selected on a map take precedence over a pick.</p>\n<p>The button shows how many die positions are selected. <strong>Clear it</strong> by clicking an\nempty part of any map, pressing <strong>Esc</strong>, or clicking the button itself (it clears\nthe selection and stays on); a second click turns the mode off. Turning it off\nalways clears the selection on every card.</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. Drag on the map to make\nyour own selection, or Ctrl/Cmd + click individual dies.</em></p>\n<h3 id=\"44-charting-dies-and-wafers\">4.4 Charting dies and wafers</h3>\n<p><strong>Right-click</strong> a population to open a menu of charts and tables drawn from just\nthose dies. Picking one opens it in a window over the map. This is how you look at a\ncluster, a scratch or an edge region on its own, or at one wafer out of a lot.</p>\n<p>What you right-click decides the population:</p>\n<ul>\n<li><strong>Selected dies</strong> \u2014 select some dies, then right-click on the map. Right-\nclicking a die that is <strong>not</strong> selected selects that die alone first;\nright-clicking a selected die, or empty space, keeps the selection.</li>\n<li><strong>Dies selected on several wafers of a gallery</strong> \u2014 by clicking a finding, or by selecting on more than one card.\nRight-click a selected die on any of those cards and the menu opens on every selected die, with a first row,\n<strong>Only this wafer</strong>, that narrows it to the dies selected on the card you clicked (and <strong>All selected</strong> to go back).</li>\n<li><strong>A bin in the legend</strong> \u2014 right-click its entry, on a map's legend or the gallery's lot legend. The menu opens on that\nbin's dies (on this wafer, or on every wafer for the lot legend), and nothing is selected: the legend only filters what\nis drawn. With several bins filtered in, right-clicking one of them opens on all of them, with an <strong>Only bin N</strong> row to\nnarrow it (and <strong>All filtered bins</strong> to go back). On the lot legend the Menu key or Shift + F10 works on a focused entry.</li>\n<li><strong>Plots and sweeps you have saved</strong> \u2014 they open in their editor over just those dies, so you can change one there; the\nchange is saved to the plot.</li>\n<li><strong>A finding</strong> \u2014 right-click it in the Summary panel. If it is not already shown, its dies are selected first, then\nthe menu opens on them: on all the wafers of a gallery that the finding selects dies on. A finding that is about\nwhole wafers and selects no dies (a wafer's yield) opens the menu on those wafers.</li>\n<li><strong>A whole wafer</strong> \u2014 right-click empty map space with nothing selected, a\ngallery card anywhere outside its map (its header, the space around the map),\nor one wafer's bar, box or point in an Insights chart (<em>Yield by wafer</em>,\n<em>Test value distribution</em>, <em>Wafer-to-wafer trend</em> \u2014 their tooltips say\n"right-click to chart this wafer").</li>\n<li><strong>Dies dragged out of the Correlation scatter</strong> \u2014 across any number of wafers.\nThe menu then also offers a <strong>Wafers</strong> table, one row per wafer the dies fall on.</li>\n</ul>\n<p>On the map you can also press the <strong>Menu</strong> key or <strong>Shift + F10</strong>, or use the\n<strong>Chart</strong> toolbar button, which charts the selection when there is one and the\nwafer otherwise.</p>\n<p>The menu offers:</p>\n<ul>\n<li><strong>Value histogram</strong> \u2014 one test's distribution, opening on the test the map\nis showing. <strong>Edit as new plot</strong> beside its population line closes it and\nopens the same test as a draft plot over the same dies, to change its axes, colour or limits and keep it if you want.</li>\n<li><strong>Process capability</strong> \u2014 every test normalised to its spec limits, or its\ntest limits when it has none, with its\nPpk. Below 30 dies the chart says each Ppk is a rough estimate: a Ppk from a\nhandful of dies can be far from the process's real capability.</li>\n<li><strong>Plots</strong> you have saved, sweeps included (see <a href=\"#plots\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'plots\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Plots</a> and <a href=\"#sweep-cards\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'sweep-cards\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Sweep cards</a>), and <strong>New plot\u2026</strong> and <strong>New sweep\u2026</strong>.</li>\n<li><strong>Dies</strong> and <strong>Test statistics</strong> \u2014 the same tables as Insights' Data tab (see\n<a href=\"#data-tables\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'data-tables\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Data tables</a>), over just these dies: every die as a row, or the\nTest Values and Functional Tests tables. Each has Export CSV and Copy, and a\nsaved file carries the population ("selected on W03") in its name and in a\nWafer column, so it cannot be mistaken for the whole lot.</li>\n</ul>\n<p>What every chart opened this way does:</p>\n<ul>\n<li>It states its population \u2014 how many dies and which wafer they came from \u2014 in\nits title and above the plot, so it cannot be mistaken for a chart of the\nwhole lot. Partial and edge-excluded dies are left out, as they are\neverywhere else, and the chart says how many that was.</li>\n<li>It is a <strong>snapshot</strong>: changing the selection afterwards does not change a\nchart that is already open.</li>\n<li>A chart that cannot be drawn from the population stays in the menu, greyed,\nwith the reason \u2014 for instance when none of the dies has values for its tests,\nor when the map is a lot stack, whose dies are averages across wafers rather\nthan measured dies.</li>\n</ul>\n<p>A map with only bin data has no charts to draw, but its menu still opens with\n<strong>Dies</strong>: the selected dies, or the whole wafer, as a table.</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 Minor (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 fades the rest of the wafer and outlines the\naffected dies. A finding about a bin also filters the legend to that bin, so the legend\nalways names what the finding describes; a finding about yield or a test clears the\nfilter. Changing the selection or the legend filter yourself releases the finding.</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-summary-panel\">6. Summary panel</h2>\n<p>The Summary panel docks next to the map and gives you the wafer or lot at a\nglance, with findings sitting directly under the headline numbers so a clicked\nfinding can highlight the affected dies right there. Open it from the toolbar, or from\nthe <strong>Summary</strong> tab on the edge of the map area, which shows while the panel is closed.</p>\n<div data-wmap-demo=\"summary-panel\" class=\"wmap-demo\"></div><p><em>The Summary panel open alongside a single wafer. Click any finding to\nhighlight the affected dies.</em></p>\n<p>Sections, top to bottom:</p>\n<ul>\n<li><strong>Summary</strong> \u2014 die and wafer counts, yield, and the population the rest of the\npanel is computed over. For several wafers the heading names them: <strong>Lot\nLOT123 \u00B7 13 wafers</strong> when every wafer comes from that one lot, otherwise\n<strong>26 wafers from 2 lots</strong> (or just <strong>13 wafers</strong> when the data records no lot).\nThe panel only says "lot" when it really is one lot. "Mean per-wafer yield" is an\n<em>unweighted</em> mean of each wafer's own yield; it is deliberately not the same\nstatistic as the bin breakdown's pass-bin share, which weights every die\nequally. The two agree only when die counts are even across the wafers.</li>\n<li><strong>What stands out</strong> \u2014 the headline (the yield, and for a lot its spread across\nwafers), then the items ranked by how many dies each costs: the largest in a tinted\nbox with its full sentence, the others as a compact list (impact, name, and share of the dies).\nAnything costing less than 1% of the dies is left to the findings list. A line says what\nwas compared. An item names a region, a wafer or a test and, for a region, the failing bins that make up\nits shortfall; a test is an item when it is outside its limits (or a functional test\nfails) on a share of the dies that clears the same floor. Its three dots and word (High, Moderate or Low impact) say how\nmuch of the lot it costs: the higher of its share of all the dies (2% moderate, 4% high)\nand its share of the dies that fail (15% moderate, 40% high), so a small area that is most\nof a good lot's loss still reads as high. Click a name to highlight that finding on the map.\nA <strong>Watch</strong> line (at most two) follows for things that cost no dies yet: a lot of five or more\nwafers whose yield, or a test's mean, trends up or down across the wafers <em>in the order given</em>\n(said as "input order": the order is only a physical one if you know it is), and a test whose\nPpk against its limits is under 1.0.\nA wafer or lot with nothing over a yield point says so: "Nothing stands out".\nThe reports open with the same section, and <strong>Full report</strong> at the foot of it opens the\nreport; in a report opened from the panel, clicking a finding's row shows it on the map.</li>\n<li><strong>Findings</strong> \u2014 detected anomalies, most severe first, each group marked with\nthree dots filled by severity (Unusual, Notable, Minor). Severity chips narrow\nthe list; Kind and Region dropdowns appear once there are enough findings to\nbe worth narrowing. <strong>Detail</strong> opens the same sentences above a readable list.</li>\n<li><strong>Bin breakdown</strong> \u2014 bars as a share of dies, pass bins first and then failing\nbins by descending count, so the dominant failure mode is at the top. It\nfollows the map's plot mode: a soft-bin map gets a soft-bin breakdown. When a\nwafer carries both bin types, a <strong>Hard / Soft</strong> selector in the section header\noverrides that.</li>\n<li><strong>Region yield</strong> \u2014 ring yield by default, with a <strong>Ring / Quadrant</strong> selector.\nEach row prints its difference from the wafer's yield in points and is tinted\nwhen it is 1, 2 or 4 or more points below it (nothing above is tinted).\nRing is the default because edge roll-off is the pattern that dominates real\nwafer maps; a genuinely asymmetric quadrant is reported as a finding above,\nwith a significance test behind it.</li>\n<li><strong>Wafer yield</strong> (several wafers only) \u2014 one bar per wafer with the median\nmarked, each row's difference from the median in points, and a tint when it is\n1, 2 or 4 or more points below it. Wafers are in slot order by default, since that is what makes a\nslot-correlated pattern visible; a <strong>Slot / Yield</strong> selector re-sorts. Wafers\nwell below or above the rest are labelled "low outlier" or "high outlier"\n(3 or more wafers, and at least 3 points from the median \u2014 the same rule as the\noutlier-wafer findings).</li>\n<li><strong>Test values</strong> \u2014 per test: mean, <strong>Ppk</strong>, and limit yield. Ppk (not Cpk)\nbecause it measures against the <em>overall</em> spread, including wafer-to-wafer\nvariation, which is what the dies actually ship against. The full descriptive\nstatistics \u2014 min, quartiles, median, max, \u03C3, both test limits, and all four\ncapability indices \u2014 are in the CSV export, and the wafer summary report shows\nN, min, quartiles, median, mean, max, \u03C3 and limit yield (a lot's report has N, min, mean,\nmax, \u03C3 and limit yield: quartiles cannot be combined from each wafer's own). Both reports\nalso carry the full Cp, Cpk, Pp and Ppk table.</li>\n<li><strong>Functional tests</strong> \u2014 pass/fail counts and pass rate per functional test.</li>\n</ul>\n<p>Every section header can be collapsed, and stays collapsed as the panel\nre-renders.</p>\n<p>A <strong>Summary report</strong> button (when present) opens a printable full-detail\nreport \u2014 yield, bin breakdown, ring and quadrant statistics, the full per-test\ntable with Cp/Cpk/Pp/Ppk, and the findings list \u2014 and can be saved as a PDF\nfrom your browser's print dialog. It opens with <strong>What stands out</strong>: the yield,\nup to three regions, fail bins or wafers ranked by how many dies each costs, and a\nline saying what was compared. An item is listed only when it costs at least one\nyield point of the dies analysed; a lot with none says so. Each figure links to its\nrow in the Findings table below. Severity is drawn as three dots and a word, so it reads in a\nblack-and-white print; yields carry a bar, and a wafer or region is tinted only when it is\nat least a point below the rest.</p>\n<p>A <strong>Data tables</strong> button beside it opens the same tables as Insights' Data tab (<a href=\"#data-tables\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'data-tables\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Data tables</a>) over this wafer, or over the whole lot in a gallery: Statistics, every die, and, for a lot, one row per wafer \u2014 each with Export CSV and Copy. It does not need Insights to be switched on.</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 and soft bin 3 (Fail) (same dies)"</strong>. That is one\ngroup of dies counted in two bin spaces, not two separate groups added together.\n(When the two bins carry different names, both are spelled out in full.)\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 panel shows lot-level findings, and the\n<strong>Wafer Yield</strong> section badges each wafer with its own findings count \u2014 click a\nrow to open that wafer. There is no separate wafers tab: every wafer appears in\nthat one list, including the ones with no findings, which is what lets you see a\nlow-yielding wafer that nothing flagged.</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> side of the <strong>Maps | Insights</strong> switch (at the far right of the toolbar row, single map or\ngallery) swaps the wafer view for a chart suite computed from the same die data \u2014 without leaving the\ntoolbar. Choose <strong>Maps</strong> to return to the map; the switch stays where it is. 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>Any chart mark that stands for one wafer \u2014 a bar in <em>Yield by wafer</em>, a box in\n<em>Test value distribution</em>, a point in <em>Wafer-to-wafer trend</em> \u2014 can be\nright-clicked to chart that wafer on its own (see\n<a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>); its tooltip says so.</p>\n<p>Insights is organised into three chart sub-tabs, a <strong>Data</strong> sub-tab holding the\nsame numbers as tables (see <em>Data tables</em> below), and a <strong>Plot</strong> sub-tab for your\nown charts and sweeps (see <em>Plots</em> and <em>Sweep cards</em> below):</p>\n<ul>\n<li><p><strong>Overview</strong> \u2014 a <strong>test pass rate</strong> chart showing which test fails most (and,\nwith "Group by" active, whether it fails more in one split than another). It\noffers up to three ways of judging, whichever the data supports: <strong>Spec\nlimits</strong> (the value against its limits), <strong>Tester flag</strong> (the pass/fail the\ntester itself recorded, which a parametric test carries whether or not limits\nwere exported), and <strong>Functional</strong> for pass/fail-only tests. The two\nparametric views can disagree \u2014 guard bands and dynamic limits routinely cause\nit \u2014 so the card reports how many dies the two judged differently rather than\npicking one for you. Alongside it, headline tiles stating the population (wafers, dies analysed,\nand for a lot the mean wafer yield \u2014 an <em>unweighted</em> mean of each wafer's own\nyield, not the die-weighted figure), a yield bar labelled with the pass bins\nactually in use and marked with the median, a hard/soft bin pareto, and\nring/quadrant regional yield.</p>\n</li>\n<li><p><strong>Distributions</strong> \u2014 process capability (Cp/Cpk/Pp/Ppk for tests with both a\nlower and upper limit \u2014 spec limits where given, otherwise test limits; tests\nwithout both still appear, normalized\nonto their own range and sorted by variability), a test-value box plot, a\nvalue histogram, and a <strong>wafer-to-wafer trend</strong> \u2014 one point per wafer at its\nmean, \u00B11\u03C3 whiskers, the mean of all wafers dashed across (labelled the "lot\nmean" when they all come from one lot), and the test's limits. The trend is always in slot order, deliberately: drift across\na cassette only reads in the physical sequence, so there is no sort control\nto destroy it. Clicking a capability box drives the box plot, histogram and\ntrend onto that same test automatically.</p>\n<p>The box plot, histogram, trend and the Correlation tab's scatter draw the\ntest's limits as dashed lines. A test can have two kinds: <strong>test limits</strong>\n(labelled <em>Lo limit</em> / <em>Hi limit</em>, short dashes) \u2014 what each die was judged\npass/fail by \u2014 and <strong>spec limits</strong> (labelled <em>LSL</em> / <em>USL</em>, long dashes) \u2014\nthe process specification that capability is measured against. When a test\nhas both, a <strong>Limits</strong> choice appears \u2014 <em>Test + spec</em> (the default), <em>Test\nlimits</em>, <em>Spec limits</em> or <em>None</em> \u2014 and it applies to all four charts at\nonce. A test that lacks the kind you chose shows the kind it has, so it\nnever looks as if it had no limits; a limit that falls outside the plotted\nrange is marked at the edge of the chart with an arrow.</p>\n<p>The box plot, histogram and trend share one row of axis controls, kept in\nsync across all three so switching between them never re-reads the same\ndata on a different scale: <strong>Axis includes limits</strong> widens the axis to cover\nevery limit shown even where the data sits well clear of them (on by default only when\ndoing so still leaves the data at least a third of the axis \u2014 otherwise a\ngenerous limit window would squash a perfectly capable distribution into a\nsliver), and <strong>Clip outliers</strong> narrows the axis to a robust range (the\nTukey fence, 1.5\u00D7 IQR beyond Q1/Q3) so a handful of extreme values don't\nstretch the axis until the rest of the distribution reads as a flat line.\nClipping affects the AXIS only \u2014 every reported statistic (mean, \u03C3, Cpk,\nthe box's own five-number summary) is computed from every value; nothing is\nexcluded from the numbers, and the panel states how many points sit outside\nthe visible range when some do. The box plot additionally has its own\n<strong>Log scale</strong> toggle, independent of the shared pair above (available once\nevery plotted value is positive) \u2014 the histogram and trend charts do not\noffer one.</p>\n</li>\n<li><p><strong>Correlation</strong> \u2014 a test-to-test correlation matrix and a die-level scatter\nplot, both stating the sample size the coefficients are computed over.\nClicking a matrix cell drives the scatter plot onto that pair, where <code>r</code> and\n<code>n</code> for that pair are printed and update as you filter the legend. Hover a\npoint to see which wafer and die it is; <strong>click</strong> it to open that wafer on the\nX test. <strong>Drag</strong> a rectangle over the plot to select the dies inside it \u2014 across\nas many wafers as they fall on \u2014 and a menu opens with charts and tables of\njust those dies (see <a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>). The\nselection stays ringed until you change the X or Y test or click empty space.</p>\n</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 and\nring/quadrant yield \u2014 all computed from this wafer's own 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>Distributions sub-tab: process capability (coloured by Ppk \u2014 green capable,\norange marginal, red poor; tests without 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=\"what-a-click-does\">What a click does</h3>\n<p>Every mark on an Insights chart stands for something, and a click opens it:</p>\n<table>\n<thead>\n<tr>\n<th>Click</th>\n<th>Opens</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>A wafer's bar, box or point (Yield by wafer, the box plot, the trend, the scatter, a Plot-tab chart)</td>\n<td>that wafer's map, on the test the chart is about (the bins, for Yield by wafer)</td>\n</tr>\n<tr>\n<td>A <strong>bin</strong> in the bin pareto (or a sub-bar of the grouped one)</td>\n<td>the right-click menu on the dies in that bin</td>\n</tr>\n<tr>\n<td>A <strong>test</strong> in a pass-rate chart</td>\n<td>the menu on the dies that fail that test, judged as the card is</td>\n</tr>\n<tr>\n<td>A bar of the <strong>value histogram</strong> (with Group by on, a column of it)</td>\n<td>the menu on the dies whose values fall in that bar, across the groups, or in the one group the legend has emphasised</td>\n</tr>\n<tr>\n<td>A level of a <strong>sweep</strong> curve</td>\n<td>the menu on the dies measured at that level</td>\n</tr>\n<tr>\n<td>A <strong>drag</strong> across the wafer-to-wafer <strong>trend</strong></td>\n<td>the menu on the dies of the wafers whose points the drag crossed (a click on a point still opens that wafer)</td>\n</tr>\n<tr>\n<td>A <strong>ring</strong> or <strong>quadrant</strong> of the yield diagrams</td>\n<td>the menu on the dies it counts</td>\n</tr>\n<tr>\n<td>A cell of the correlation matrix</td>\n<td>that pair in the scatter</td>\n</tr>\n<tr>\n<td>A test in the process-capability chart</td>\n<td>that test in the other distribution charts</td>\n</tr>\n<tr>\n<td>A row of the <strong>Wafers</strong> table</td>\n<td>that wafer's map</td>\n</tr>\n<tr>\n<td>A row of the <strong>Dies</strong> table</td>\n<td>that die, ringed on its wafer's map</td>\n</tr>\n</tbody></table>\n<p>The menu offers the charts and tables for just those dies (and your own plots), and its heading names\nthem, for example "412 dies in hard bin 3, across 13 wafers". A mark that has no dies behind it does nothing.\nRight-click on any wafer's bar, box or point opens the same menu for the whole wafer.</p>\n<h3 id=\"data-tables\">Data tables</h3>\n<p>The <strong>Data</strong> sub-tab shows the wafers Insights is scoped to as tables, one at a\ntime, chosen with the <strong>Statistics | Dies | Wafers</strong> control. It follows the\nsame "Group by" and "Show" scope as the charts.</p>\n<ul>\n<li><strong>Statistics</strong> \u2014 the <strong>Test Values</strong> table (count, min, quartiles, mean, \u03C3,\nPpk, limits and the limit yield for each test, with its N stated) and the\n<strong>Functional Tests</strong> pass-rate table. With "Group by" active there is one set\nper group.</li>\n<li><strong>Dies</strong> \u2014 one row per die: wafer, X, Y, ring, quadrant, site, bins, a column\nfor each test, and the wafer's metadata. Only the rows in view are drawn, so a\nlot of hundreds of thousands of dies scrolls smoothly. Click a column heading\nto sort by it (again to reverse; a die with no value sorts last).</li>\n<li><strong>Wafers</strong> \u2014 one row per wafer: lot, split and any other metadata, the die\ncounts, the yield (the same figure as the yield chart), and the mean of each\ntest (the first 50).</li>\n</ul>\n<p>In the Dies table, <strong>click a row</strong> to show that die on its map: the table steps\naside (or Insights closes) and the die is ringed, on its own card in a gallery. The\nring goes with the next click on the map, or Esc.</p>\n<p><strong>Export CSV</strong> saves the table as shown, in the order shown. Numbers are written\nin full, as plain numbers, not as the formatted text on screen (<code>0.5123457</code>, not\n<code>512 mV</code>), with the unit in the column heading. <strong>Copy</strong> puts the table on the\nclipboard as tab-separated text, ready to paste into a spreadsheet; it is offered\nfor tables up to about 200,000 cells. For the Dies table, <strong>Export format</strong> (Wide | Long) chooses\nthe layout of the file: wide has a column per test, long has a row per die per\ntest (a die with no result for a test has no row), the shape statistics tools\nprefer. The note under the buttons says how many rows the file will have, and\nwarns when that is more than a spreadsheet can open (1,048,576).</p>\n<h3 id=\"plots\">Plots</h3>\n<p>The <strong>Plot</strong> sub-tab is where you build your own charts. <strong>+ New plot</strong> starts one,\nalready filled in with the first two tests of the lot, and opens it beside a large\ncopy of the chart. <strong>Add examples</strong> draws one plot of each chart type the lot can\nshow (a scatter of the first two tests, a histogram, a box, a bar of yield by the\nfirst lot field that divides the wafers, a line over wafer order, and a sweep of the\nfirst tests in test order), to start from\nor to see what each type is for; pressing it again adds only what is missing. Every change you make there is drawn at once; there is no Apply\nbutton, and the plot is kept as you go.</p>\n<p>In <strong>Setup</strong>, choose the <strong>chart type</strong>, then the field for each role:</p>\n<table>\n<thead>\n<tr>\n<th>Chart type</th>\n<th>What it shows</th>\n<th>Fields</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Scatter</strong></td>\n<td>one point per die (or per wafer)</td>\n<td>X and Y, both numbers</td>\n</tr>\n<tr>\n<td><strong>Histogram</strong></td>\n<td>how often each value occurs</td>\n<td>the values</td>\n</tr>\n<tr>\n<td><strong>Box</strong></td>\n<td>quartiles, with whiskers to the minimum and maximum, for each category</td>\n<td>categories (wafer by default), values</td>\n</tr>\n<tr>\n<td><strong>Bar</strong></td>\n<td>one aggregated value for each category (or a count)</td>\n<td>categories, values (optional), how to combine them</td>\n</tr>\n<tr>\n<td><strong>Line</strong></td>\n<td>one aggregated value at each X, joined</td>\n<td>X, Y, how to combine them</td>\n</tr>\n</tbody></table>\n<ul>\n<li><strong>X axis</strong> and <strong>Y axis</strong> (a histogram has one <strong>Values</strong> field; a box or bar has\n<strong>Categories</strong> instead of a numeric X). Any measured test, a die's X or Y position,\na wafer's yield or die count, or a lot field with numbers in it (slot, temperature).\nThe list is grouped Tests \u00B7 Die \u00B7 Wafer and filters by name or test number, so with\na few hundred tests you type <code>1050</code> or <code>vth</code> rather than scrolling. A field the chart\ntype cannot use is not offered; switching type keeps your fields where they still\napply and brings back the ones that did not when you switch back.</li>\n<li><strong>Colour</strong>: a category such as wafer, split, hard bin, site or ring, or, on a\nscatter, a measured value or wafer figure drawn on a gradient (a colour bar under\nthe title states its range). <strong>Follow Group by</strong> (the default) takes the colours from\nthe Group by control above, so changing it recolours every plot that follows it;\n<strong>None</strong> draws one colour.</li>\n<li><strong>Combine values by</strong> (bar and line, and any plot with one mark per wafer): mean,\nmedian, minimum, maximum, sum or count. <strong>Pooled yield</strong> is offered for Yield: it is\nthe passing dies over the judged dies of all the wafers in a bar, not an average of\ntheir percentages (the plain mean of Yield is the mean of per-wafer yields, and is\nlabelled so).</li>\n<li><strong>One mark per</strong>: Automatic uses the finest level the fields allow. <strong>Wafer</strong> makes\nevery mark a wafer, combining its dies' values as chosen above, which is how "mean\nIdsat per wafer against slot" is drawn. Yield can be split by a per-die field\n(ring, quadrant, bin, die position) in a <strong>bar</strong> (pooled yield per ring) or a <strong>line</strong>, which take the pass verdict of each die; a box,\nscatter or histogram of yield cannot, and says why.</li>\n</ul>\n<p>When fields do not go together, the list says so before you choose: a field that would leave a plot that cannot be\ndrawn is dimmed in the <strong>X</strong>, <strong>Y</strong> and <strong>Colour</strong> lists with the reason after it, and does nothing when picked. A plot\nthat cannot be drawn says in words what is wrong and what to use instead.</p>\n<p>In <strong>Customise</strong>, the <strong>title</strong> and each <strong>axis title</strong> are written for you until\nyou type your own (the box shows what it would say, and clearing it brings that\nback). If you type a title and later change the fields, the plot says when the title\nstill names a test it no longer shows, or names only one of the two it does, with a\nbutton to go back to the automatic title; a title that names none of the fields ("Process\ncheck") is yours and is left alone. Each axis can have a <strong>minimum</strong>, a <strong>maximum</strong>, a <strong>log scale</strong> (offered\nwhatever the values, but it stays linear, and says so, if any value is zero or\nnegative) and <strong>reverse direction</strong>. A histogram also has a number of <strong>bins</strong>. A category axis has a title only.</p>\n<p>When a plotted test has limits they are drawn as dashed lines on the axis that measures it (a histogram's values, a scatter's X or\nY, a box, bar or line's values when they are measured values or their mean, median, minimum or maximum): short dashes for the\ntest's own limits, long for its specification limits, each labelled with its value. The axis widens to include them when that\nleaves the data at least a third of it, as in Insights, and a limit off the edge is marked there instead of vanishing. Choose\nwhich are drawn under <strong>Limits</strong> in Customise. Where the wafers in view disagree about a test's limits none are drawn, as in\nInsights: the reconciled test list drops conflicting limits.</p>\n<p>Under every plot is a line stating what it shows: the wafers and dies, how values\nwere combined ("median of Vth per wafer"), and how many dies were left out for\nhaving no value ("12 dies without Idsat not plotted"). A plot never drops a die\nwithout saying so.</p>\n<p><strong>Hover</strong> a point, bar, box or line to see its values and how many dies or wafers it\nstands for. <strong>Click</strong> a point (or a wafer's bar or box) to open that wafer, on the plot's own\ntest, so its map shows the values the plot is about and not the bins (a plot with no test in it,\nlike yield against wafer order, opens the default map). Click any other bar, box, histogram bar or\nline point to open the right-click menu on the dies it counts, and <strong>drag</strong> a rectangle over a\nscatter to select the dies (or wafers) inside it. The selection opens the same\nright-click menu as on a map, so a few dies from a plot can be charted and tabulated\nin turn.</p>\n<p><strong>Keeping your plots.</strong> A plot is a recipe, not a picture: it says which fields go\nwhere, and nothing about which wafers. It is therefore kept by your application\nbetween sessions and drawn again on the next lot. If you open a lot that lacks a\ntest a plot needs, the plot stays in the list, dimmed, with the reason ("Needs test\n3001 (Leak), which is not in these dies"); it is not removed. <strong>Export plots\u2026</strong>\nwrites them all to a file, and <strong>Import plots\u2026</strong> adds the plots of such a file to\nyours, as copies where a plot with the same identity already exists, never\nreplacing one. Each card has <strong>Edit</strong>, <strong>Duplicate</strong> and <strong>Delete</strong>; a deleted plot\ncan be restored with <strong>Undo</strong> for ten seconds. <strong>Delete all plots\u2026</strong> removes every\nplot, sweeps included, after asking you to confirm (the question says how many, and\nthat <strong>Export plots\u2026</strong> first keeps a copy); <strong>Undo</strong> restores the whole list for ten\nseconds. It is dimmed while there are no plots.</p>\n<p><strong>Three different ways to divide the data, kept apart.</strong> A plot divides data in\nthree places, and they do different jobs, so neighbouring plots can ask different\nquestions:</p>\n<table>\n<thead>\n<tr>\n<th>What it decides</th>\n<th>Where</th>\n<th>Kept with the plot?</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>The categories on an axis</td>\n<td>the plot's own <strong>X</strong> field</td>\n<td>yes</td>\n</tr>\n<tr>\n<td>The colour series within it</td>\n<td>the plot's own <strong>Colour</strong> field</td>\n<td>yes</td>\n</tr>\n<tr>\n<td>Which wafers are in view</td>\n<td>the <strong>Show</strong> control above</td>\n<td>no, it is the scope</td>\n</tr>\n</tbody></table>\n<p><strong>Plots in the right-click menu.</strong> Every saved plot is also a row in the menu that\nopens on a selection or a wafer (<strong>Plots</strong> section), drawn over just those dies and\ncaptioned with them.</p>\n<p><img src=\"images/guide-plot-drilldown.png\" alt=\"The right-click menu on a selection, with the Plots section\"> <strong>New plot\u2026</strong> and <strong>New sweep\u2026</strong> in the same menu start a draft on the selection;\na draft is kept only if you press <strong>Add to my plots</strong>.</p>\n<p>Every change is kept as you make it. If you make a mistake, <strong>Reset</strong> (under the settings) puts the plot back as it was\nwhen you opened the editor, and <strong>Cancel</strong> does the same and closes it. Closing the window with its own button keeps what\nyou changed.</p>\n<h3 id=\"sweep-cards\">Sweep cards</h3>\n<p>A <strong>sweep</strong> is a card on the <strong>Plot</strong> sub-tab, beside your other plots. <strong>+ New\nsweep</strong> starts one on the first tests of the lot, and <strong>Edit</strong> opens it beside a\nlive copy of the curve. A sweep is kept, duplicated, deleted, exported and\nimported like any plot, and is offered in the right-click menu's <strong>Plots</strong>\nsection. It exists for a test program that measures the same quantity at a\nseries of drive levels and records each level as its own test number \u2014 often one\nblock sweeping up and another sweeping down. Read one test at a time that is a\nrow of unrelated distributions; read as a sweep it is a pair of response curves,\nand the card measures the pair.</p>\n<p><strong>Each line is the population median, with a shaded p10\u2013p90 band</strong> \u2014 not one\ntrace per die. A lot is thousands of dies, so per-die traces would be a solid\nblock of ink. The band is the spread across the dies currently in scope, so a\nband that widens at one end of the sweep is telling you the population disagrees\nmost at that level.</p>\n<p><strong>The dies behind it are whatever Insights is scoped to.</strong> A sweep names tests,\nnot dies \u2014 so the group or wafer selected in the panels above it decides the\npopulation, and the card's die count states what that came to. To sweep a\nhand-picked set of dies instead, select them on a map and right-click (see\n<a href=\"#44-charting-dies-and-wafers\" onclick=\"(function(e){e.preventDefault();var g=e.target.closest('.wmap-guide');var el=g&&g.querySelector('[id=\\'44-charting-dies-and-wafers\\']');if(el)el.scrollIntoView({behavior:'smooth'});})(event)\">Section 4.4</a>).</p>\n<p>Two measurements are drawn on the plot and restated underneath:</p>\n<ul>\n<li><strong>Crossing</strong> \u2014 where the first two curves meet. If they cross more than once\nthe card says so rather than reporting the first as though it were the only\none.</li>\n<li><strong>Separation</strong> \u2014 the horizontal distance between the two curves at the levels\nthe application asked about. With one curve rising and one falling the pair\ntraces a V, and this is the width of that V. A level that one of the curves\nnever reaches reads <strong>not measurable</strong>, naming the curve \u2014 never <code>0</code>, which\nwould read as "they meet here".</li>\n</ul>\n<p>Only the <strong>first two</strong> curves are measured. Any further ones are drawn for\ncontext.</p>\n<p>:\ntest numbers and ranges, such as <code>1010, 1011, 1020..1030</code> (a range means the\ntests declared between its ends). Then choose where each test's X comes from:\n<strong>Test order</strong> (the position in the run, labelled by test), <strong>Values</strong> (one\nnumber per test, in the same order) or <strong>From test name</strong> (a pattern such as\n<code>LRS_STATS_{x}</code>, for programs that record the swept value only in the test\ntext). The editor lists the first few test names with what your pattern reads\nfrom each as you type, and <strong>Pattern examples</strong> shows worked ones: <code>@ {x}</code>\nreads 0.55 from <code>Fmax @ 0.55 V</code>, and <code>-{x}</code> reads 5 from <code>1234-5</code>). Text that is not a test number or a range is flagged under the box,\nnaming the word, and is not applied, so the curve beside it never shows\nsomething you did not mean. <strong>+ Add series</strong> adds a curve and <strong>Remove</strong> drops\none; the crossing and widths appear once there are two.</p>\n<p><strong>A sweep remembers what its tests were called.</strong> The editor and <strong>+ New sweep</strong> record each test's name\nalongside its number. Open the sweep on a lot where a number now carries a different name (a test program that\nreuses numbers for other measurements) and that test is not drawn: the card names it, and the crossing and widths\nare not measured, rather than presenting another quantity as the original curve. Renaming a test in the selector\nhas the same effect. A sweep written by hand, or imported from a file without names, is not checked.</p>\n<p><strong>The x axis is the sweep, not the lot</strong> \u2014 that is what distinguishes this card\nfrom the wafer-to-wafer trend, which walks one test across wafers. If the\napplication supplied the real swept quantity, the axis is in those units (dBm,\nvolts, \u00B0C) and the crossing is reported in them. If it did not, the axis is the\nposition in the sequence, labelled by test, because test numbers are identifiers\n\u2014 treating them as a scale would invent spacing the data never claimed.</p>\n<p>Some sweeps step by multiples \u2014 thresholds of 1k, 2k, 5k \u2026 1M \u2014 and are drawn\non a <strong>logarithmic</strong> x axis, so each step gets the same room. There the crossing\nis found along the log axis, and a width is given as a <strong>ratio</strong> between the two\ncurves, with the level each reaches: <em>\u00D72.49 (15.9 k\u03A9 \u2192 39.7 k\u03A9)</em>. On a log axis\nthe same shift is the same multiple anywhere along it, which a difference in \u03A9\nwould hide.</p>\n<p>The card footer reports anything that limits what you are seeing: tests in the\nsweep that have no definition, functional (pass/fail) tests inside a sweep,\nwhich have no value to plot, and series whose tests carry different units.</p>\n<p>If the swept values no longer line up with the tests \u2014 usually because a test in\nthe sweep is missing from this data \u2014 the footer lists the tests it did find, and\nthe card is drawn in test order with <strong>the crossing and widths not measured</strong>.\nPairing the remaining values with the remaining tests would put every later point\nat the wrong level, which gives a plausible curve and a wrong crossing.</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>The saved image is the chart as shown, under a header that says what it is: its <strong>title</strong>,\nwhat its controls are set to (<strong>Test: vth_n_mV \u00B7 1001</strong>, <strong>Wafer: W03</strong>, <strong>Sort: yield</strong>), the\nlines the chart states about itself (the population and N, how values were combined, what\nthe box and whiskers mean, how the bars are normalised), and its colour key (the legend, or\nthe colour bar's name and range). The instructions that only make sense on screen ("click a\npoint to open this wafer") are left out. A chart on the <strong>Plot</strong> tab carries the line stating\nits wafers and dies in the same place. The image takes the card's own background, so a dark\ntheme saves a dark chart. The file name identifies the lot, wafers and chart (see below).</p>\n<p><strong>Printing.</strong> The dropdowns, toggles and buttons (camera, expand and, on the Plot tab, New\nplot, Add examples, Import, Export, Delete all, Edit, Duplicate and Delete) are left off the printed page.\nIn their place each chart prints a small block under its title giving the same settings and\nlines as the saved image, so a printed histogram says which test it is of.</p>\n<h3 id=\"names-of-saved-files\">Names of saved files</h3>\n<p>Every image and CSV you save is named for what it shows: the lot, then the wafer (or how many\nwafers), then the content. For example, <code>LOT123_W05_hard-bin.png</code>, <code>LOT123_W05_die-list.csv</code> or\n<code>LOT123_25-wafers_yield-by-wafer.png</code>. Saving the same export from different wafers gives\ndifferent names, so files don't overwrite each other or need renaming. A part is left out when\nthe data doesn't have it, for example a wafer with no ID. Your application may choose its own\nname for map images instead.</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
|