in site/js/bowiePlot.js [107:186]
function sideLayout(matrix, circles, startAngle, angle, padAngle, radius, type) {
var n = matrix.length;
var m = matrix[0].length;
var groupSums = [];
var total = 0;
var arcs = new Array(n);
var chordTemp = new Array(n * m);
var chords = [];
var k;
var dx;
var x;
var x0;
var i;
var j;
matrix.forEach(function (group) {
groupSums.push(group.reduce(function (prev, curr) { return prev + curr; }));
});
total = groupSums.reduce(function (prev, curr) { return prev + curr; });
k = Math.max(0, angle - padAngle * n) / total;
dx = k ? padAngle : angle / n;
x = startAngle;
i = -1;
while(++i < n) {
x0 = x;
j = -1;
while(++j < n) {
var v = matrix[i][j];
var a0 = x;
var a1 = x += v * k;
chordTemp[j + (n * i)] = {
index : i,
subindex : j,
startAngle : a0,
endAngle : a1,
value : v,
};
}
arcs[i] = {
index : i,
type : type,
startAngle : x0,
endAngle : x,
value : groupSums[i],
};
x += dx;
}
chordTemp.forEach(function (chord) {
if (chord.value > 0) {
var circle = circles[chord.subindex];
chords.push({
index : chord.index,
subindex : chord.subindex,
type : type,
source : {
startAngle : chord.startAngle,
endAngle : chord.endAngle,
radius : radius,
},
target : {
startAngle : circle.theta - 0.001,
endAngle : circle.theta + 0.001,
radius : circle.radius,
},
});
}
});
return [arcs, chords];
}