MCPcopy Index your code
hub / github.com/microsoft/SandDance / density

Function density

docs/app/js/sanddance-app.js:130796–130840  ·  view source on GitHub ↗
(data, counts)

Source from the content-addressed store, hash-verified

130794 -1
130795 ], dx = 960, dy = 500, k = 2; // log2(cellSize)
130796 function density(data, counts) {
130797 const rx = radius(bandwidth[0], data, x) >> k, // blur x-radius
130798 ry = radius(bandwidth[1], data, y) >> k, // blur y-radius
130799 ox = rx ? rx + 2 : 0, // x-offset padding for blur
130800 oy = ry ? ry + 2 : 0, // y-offset padding for blur
130801 n = 2 * ox + (dx >> k), // grid width
130802 m = 2 * oy + (dy >> k), // grid height
130803 values0 = new Float32Array(n * m), values1 = new Float32Array(n * m);
130804 let values = values0;
130805 data.forEach((d)=>{
130806 const xi = ox + (+x(d) >> k), yi = oy + (+y(d) >> k);
130807 if (xi >= 0 && xi < n && yi >= 0 && yi < m) values0[xi + yi * n] += +weight(d);
130808 });
130809 if (rx > 0 && ry > 0) {
130810 blurX(n, m, values0, values1, rx);
130811 blurY(n, m, values1, values0, ry);
130812 blurX(n, m, values0, values1, rx);
130813 blurY(n, m, values1, values0, ry);
130814 blurX(n, m, values0, values1, rx);
130815 blurY(n, m, values1, values0, ry);
130816 } else if (rx > 0) {
130817 blurX(n, m, values0, values1, rx);
130818 blurX(n, m, values1, values0, rx);
130819 blurX(n, m, values0, values1, rx);
130820 values = values1;
130821 } else if (ry > 0) {
130822 blurY(n, m, values0, values1, ry);
130823 blurY(n, m, values1, values0, ry);
130824 blurY(n, m, values0, values1, ry);
130825 values = values1;
130826 } // scale density estimates
130827 // density in points per square pixel or probability density
130828 const s = counts ? Math.pow(2, -2 * k) : 1 / (0, _d3Array.sum)(values);
130829 for(let i = 0, sz = n * m; i < sz; ++i)values[i] *= s;
130830 return {
130831 values: values,
130832 scale: 1 << k,
130833 width: n,
130834 height: m,
130835 x1: ox,
130836 y1: oy,
130837 x2: ox + (dx >> k),
130838 y2: oy + (dy >> k)
130839 };
130840 }
130841 density.x = function(_) {
130842 return arguments.length ? (x = number(_), density) : x;
130843 };

Callers

nothing calls this directly

Calls 6

radiusFunction · 0.70
xFunction · 0.70
yFunction · 0.70
blurXFunction · 0.70
blurYFunction · 0.70
forEachMethod · 0.45

Tested by

no test coverage detected