function sideLayout()

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];
  }