Repository: incubator-senssoft-tap
Updated Branches:
  refs/heads/ryan-sankey [created] 607675ba5


http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/index.html
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/index.html b/Sankey/csvSankey-v4/index.html
new file mode 100644
index 0000000..8003a5b
--- /dev/null
+++ b/Sankey/csvSankey-v4/index.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<title>Sankey Diagram</title>
+<style>
+    #chart {
+        height: 800px;
+    }
+    
+    .node rect {
+        cursor: move;
+        fill-opacity: .9;
+        shape-rendering: crispEdges;
+    }
+    
+    .node text {
+        pointer-events: none;
+        text-shadow: 0 1px 0 #fff;
+        font-family: Arial, Helvetica, sans-serif;
+    }
+    
+    .link {
+        fill: none;
+        stroke: #000;
+        stroke-opacity: .2;
+    }
+    
+    .link:hover {
+        stroke-opacity: .5;
+    }
+</style>
+
+<body>
+    <div id="chart"></div>
+    <script src="https://d3js.org/d3.v4.min.js";></script>
+    <script src="d3-sankey.js"></script>
+    <script 
src='https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.10.3/babel.min.js'></script>
+    <!-- <script lang='babel' type='text/babel'> -->
+    <script>
+        const margin = {
+            top: 1,
+            right: 1,
+            bottom: 6,
+            left: 1
+        };
+
+        const width = 1200 - margin.left - margin.right;
+        const height = 800 - margin.top - margin.bottom;
+        const formatNumber = d3.format(',.0f');
+        const format = d => `${formatNumber(d)} TWh`;
+        const color = d3.scaleOrdinal(d3.schemeCategory20);
+
+        const svg = d3.select('#chart').append('svg')
+            .attr('width', width + margin.left + margin.right)
+            .attr('height', height + margin.top + margin.bottom)
+            .append('g')
+            .attr('transform', `translate(${margin.left},${margin.top})`);
+
+        const sankey = d3_sankey.sankey()
+            .nodeWidth(20)
+            .nodePadding(30)
+            .size([width, height])
+            .align("left");
+
+        const path = sankey.link();
+
+        d3.json('sankey.json', energy => {
+
+            sankey
+                .nodes(energy.nodes)
+                .links(energy.links)
+                .layout(32);
+
+            const link = svg.append('g').selectAll('.link')
+                .data(energy.links)
+                .enter().append('path')
+                .attr('class', 'link')
+                .attr('d', path)
+                .style('stroke-width', d => Math.max(1, d.dy))
+                .sort((a, b) => b.dy - a.dy);
+
+            link.append('title')
+                .text(d => `${d.source.name} → 
${d.target.name}\n${format(d.value)}`);
+
+            const node = svg.append('g').selectAll('.node')
+                .data(energy.nodes)
+                .enter().append('g')
+                .attr('class', 'node')
+                .attr('transform', d => `translate(${d.x},${d.y})`)
+                .call(d3.drag()
+                    .subject(d => d)
+                    .on('start', function() {
+                        this.parentNode.appendChild(this);
+                    })
+                    .on('drag', dragmove));
+
+            node.append('rect')
+                .attr('height', d => d.dy)
+                .attr('width', sankey.nodeWidth())
+                .style('fill', d => d.color = color(d.name.replace(/ .*/, '')))
+                .style('stroke', d => d3.rgb(d.color).darker(2))
+                .append('title')
+                .text(d => `${d.name}\n${format(d.value)}`);
+
+            node.append('text')
+                .attr('x', -6)
+                .attr('y', d => d.dy / 2)
+                .attr('dy', '.35em')
+                .attr('text-anchor', 'end')
+                .attr('transform', null)
+                .text(d => d.name)
+                .filter(d => d.x < width / 2)
+                .attr('x', 6 + sankey.nodeWidth())
+                .attr('text-anchor', 'start');
+
+            function dragmove(d) {
+                d3.select(this).attr('transform', `translate(${d.x},${d.y = 
Math.max(0, Math.min(height - d.dy, d3.event.y))})`);
+                sankey.relayout();
+                link.attr('d', path);
+            }
+        });
+    </script>
+</body>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/sample.json
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/sample.json b/Sankey/csvSankey-v4/sample.json
new file mode 100644
index 0000000..1569e69
--- /dev/null
+++ b/Sankey/csvSankey-v4/sample.json
@@ -0,0 +1,81 @@
+{
+    "nodes": [
+        {
+            "name": "#document"
+        },
+        {
+            "name": "a"
+        },
+        {
+            "name": "a.btn"
+        },
+        {
+            "name": "a.collapsed dropdown-toggle primary"
+        },
+        {
+            "name": "a.dropdown-toggle navbar-text"
+        },
+        {
+            "name": "a.dropdown-toggle primary ng-binding"
+        },
+        {
+            "name": "a.modebar-btn"
+        },
+        {
+            "name": "a.modebar-btn active"
+        },
+        {
+            "name": "a.navbar-text neon-popup-button pull-right"
+        },
+        {
+            "name": "a.ng-binding"
+        }
+    ],
+    "links": [
+        {
+            "value": 1,
+            "target": 5,
+            "source": 4,
+            "duration": 0,
+            "typeChange": true,
+            "type": "blur",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 3,
+            "duration": 305,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 1,
+            "duration": 456,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 1,
+            "source": 3,
+            "duration": -762069,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 3,
+            "duration": 74,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        }
+    ]
+}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/sampledTen.json
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/sampledTen.json 
b/Sankey/csvSankey-v4/sampledTen.json
new file mode 100644
index 0000000..8395ed6
--- /dev/null
+++ b/Sankey/csvSankey-v4/sampledTen.json
@@ -0,0 +1,217 @@
+{
+    "nodes": [
+        {
+            "id": 0,
+            "name": "#document"
+        },
+        {
+            "id": 1,
+            "name": "a"
+        },
+        {
+            "id": 2,
+            "name": "a.btn"
+        },
+        {
+            "id": 3,
+            "name": "a.collapsed dropdown-toggle primary"
+        },
+        {
+            "id": 4,
+            "name": "a.dropdown-toggle navbar-text"
+        },
+        {
+            "id": 5,
+            "name": "a.dropdown-toggle primary ng-binding"
+        },
+        {
+            "id": 6,
+            "name": "a.modebar-btn"
+        },
+        {
+            "id": 7,
+            "name": "a.modebar-btn active"
+        },
+        {
+            "id": 8,
+            "name": "a.navbar-text neon-popup-button pull-right"
+        },
+        {
+            "id": 9,
+            "name": "a.ng-binding"
+        }
+    ],
+    "links": [
+        {
+            "value": 1,
+            "target": 5,
+            "source": 4,
+            "duration": 0,
+            "typeChange": true,
+            "type": "blur",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 3,
+            "duration": 305,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 3,
+            "duration": 28,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 3,
+            "duration": 241,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 3,
+            "duration": 82,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 1,
+            "duration": 9,
+            "typeChange": true,
+            "type": "click",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 1,
+            "duration": 314,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 1,
+            "duration": 895,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 1,
+            "duration": 246,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 5,
+            "source": 1,
+            "duration": 456,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 0,
+            "duration": 8883,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 0,
+            "duration": 132609,
+            "typeChange": true,
+            "type": "blur",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 1,
+            "source": 3,
+            "duration": -762069,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 0,
+            "duration": 40634,
+            "typeChange": true,
+            "type": "blur",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 0,
+            "duration": 32341,
+            "typeChange": true,
+            "type": "blur",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 1,
+            "source": 3,
+            "duration": -545841,
+            "typeChange": true,
+            "type": "mouseover",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 0,
+            "duration": 3170,
+            "typeChange": true,
+            "type": "blur",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 0,
+            "duration": 1260,
+            "typeChange": true,
+            "type": "focus",
+            "targetChange": false
+        },
+        {
+            "value": 1,
+            "target": 0,
+            "source": 3,
+            "duration": 74,
+            "typeChange": false,
+            "type": "mouseover",
+            "targetChange": true
+        }
+    ]
+}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/sankey.js
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/sankey.js b/Sankey/csvSankey-v4/sankey.js
new file mode 100644
index 0000000..0ac1abb
--- /dev/null
+++ b/Sankey/csvSankey-v4/sankey.js
@@ -0,0 +1,295 @@
+d3.sankey = function() {
+    var sankey = {},
+        nodeWidth = 24,
+        nodePadding = 8,
+        size = [1, 1],
+        nodes = [],
+        links = [];
+
+    sankey.nodeWidth = function(_) {
+        if (!arguments.length) return nodeWidth;
+        nodeWidth = +_;
+        return sankey;
+    };
+
+    sankey.nodePadding = function(_) {
+        if (!arguments.length) return nodePadding;
+        nodePadding = +_;
+        return sankey;
+    };
+
+    sankey.nodes = function(_) {
+        if (!arguments.length) return nodes;
+        nodes = _;
+        return sankey;
+    };
+
+    sankey.links = function(_) {
+        if (!arguments.length) return links;
+        links = _;
+        return sankey;
+    };
+
+    sankey.size = function(_) {
+        if (!arguments.length) return size;
+        size = _;
+        return sankey;
+    };
+
+    sankey.layout = function(iterations) {
+        computeNodeLinks();
+        computeNodeValues();
+        computeNodeBreadths();
+        computeNodeDepths(iterations);
+        computeLinkDepths();
+        return sankey;
+    };
+
+    sankey.relayout = function() {
+        computeLinkDepths();
+        return sankey;
+    };
+
+    sankey.link = function() {
+        var curvature = .5;
+
+        function link(d) {
+            var x0 = d.source.x + d.source.dx,
+                x1 = d.target.x,
+                xi = d3.interpolateNumber(x0, x1),
+                x2 = xi(curvature),
+                x3 = xi(1 - curvature),
+                y0 = d.source.y + d.sy + d.dy / 2,
+                y1 = d.target.y + d.ty + d.dy / 2;
+            return "M" + x0 + "," + y0 +
+                "C" + x2 + "," + y0 +
+                " " + x3 + "," + y1 +
+                " " + x1 + "," + y1;
+        }
+
+        link.curvature = function(_) {
+            if (!arguments.length) return curvature;
+            curvature = +_;
+            return link;
+        };
+
+        return link;
+    };
+
+    // Populate the sourceLinks and targetLinks for each node.
+    // Also, if the source and target are not objects, assume they are indices.
+    function computeNodeLinks() {
+        nodes.forEach(function(node) {
+            node.sourceLinks = [];
+            node.targetLinks = [];
+        });
+        links.forEach(function(link) {
+            var source = link.source,
+                target = link.target;
+            if (typeof source === "number") source = link.source = 
nodes[link.source];
+            if (typeof target === "number") target = link.target = 
nodes[link.target];
+            source.sourceLinks.push(link);
+            target.targetLinks.push(link);
+        });
+    }
+
+    // Compute the value (size) of each node by summing the associated links.
+    function computeNodeValues() {
+        nodes.forEach(function(node) {
+            node.value = Math.max(
+                d3.sum(node.sourceLinks, value),
+                d3.sum(node.targetLinks, value)
+            );
+        });
+    }
+
+    // Iteratively assign the breadth (x-position) for each node.
+    // Nodes are assigned the maximum breadth of incoming neighbors plus one;
+    // nodes with no incoming links are assigned breadth zero, while
+    // nodes with no outgoing links are assigned the maximum breadth.
+    function computeNodeBreadths() {
+        var remainingNodes = nodes,
+            nextNodes,
+            x = 0;
+
+        while (remainingNodes.length) {
+            nextNodes = [];
+            remainingNodes.forEach(function(node) {
+                node.x = x;
+                node.dx = nodeWidth;
+                node.sourceLinks.forEach(function(link) {
+                    if (nextNodes.indexOf(link.target) < 0) {
+                        nextNodes.push(link.target);
+                    }
+                });
+            });
+            remainingNodes = nextNodes;
+            ++x;
+        }
+
+        //
+        moveSinksRight(x);
+        scaleNodeBreadths((size[0] - nodeWidth) / (x - 1));
+    }
+
+    function moveSourcesRight() {
+        nodes.forEach(function(node) {
+            if (!node.targetLinks.length) {
+                node.x = d3.min(node.sourceLinks, function(d) { return 
d.target.x; }) - 1;
+            }
+        });
+    }
+
+    function moveSinksRight(x) {
+        nodes.forEach(function(node) {
+            if (!node.sourceLinks.length) {
+                node.x = x - 1;
+            }
+        });
+    }
+
+    function scaleNodeBreadths(kx) {
+        nodes.forEach(function(node) {
+            node.x *= kx;
+        });
+    }
+
+    function computeNodeDepths(iterations) {
+        var nodesByBreadth = d3.nest()
+            .key(function(d) { return d.x; })
+            .sortKeys(d3.ascending)
+            .entries(nodes)
+            .map(function(d) { return d.values; });
+
+        //
+        initializeNodeDepth();
+        resolveCollisions();
+        for (var alpha = 1; iterations > 0; --iterations) {
+            relaxRightToLeft(alpha *= .99);
+            resolveCollisions();
+            relaxLeftToRight(alpha);
+            resolveCollisions();
+        }
+
+        function initializeNodeDepth() {
+            var ky = d3.min(nodesByBreadth, function(nodes) {
+                return (size[1] - (nodes.length - 1) * nodePadding) / 
d3.sum(nodes, value);
+            });
+
+            nodesByBreadth.forEach(function(nodes) {
+                nodes.forEach(function(node, i) {
+                    node.y = i;
+                    node.dy = node.value * ky;
+                });
+            });
+
+            links.forEach(function(link) {
+                link.dy = link.value * ky;
+            });
+        }
+
+        function relaxLeftToRight(alpha) {
+            nodesByBreadth.forEach(function(nodes, breadth) {
+                nodes.forEach(function(node) {
+                    if (node.targetLinks.length) {
+                        var y = d3.sum(node.targetLinks, weightedSource) / 
d3.sum(node.targetLinks, value);
+                        node.y += (y - center(node)) * alpha;
+                    }
+                });
+            });
+
+            function weightedSource(link) {
+                return center(link.source) * link.value;
+            }
+        }
+
+        function relaxRightToLeft(alpha) {
+            nodesByBreadth.slice().reverse().forEach(function(nodes) {
+                nodes.forEach(function(node) {
+                    if (node.sourceLinks.length) {
+                        var y = d3.sum(node.sourceLinks, weightedTarget) / 
d3.sum(node.sourceLinks, value);
+                        node.y += (y - center(node)) * alpha;
+                    }
+                });
+            });
+
+            function weightedTarget(link) {
+                return center(link.target) * link.value;
+            }
+        }
+
+        function resolveCollisions() {
+            nodesByBreadth.forEach(function(nodes) {
+                var node,
+                    dy,
+                    y0 = 0,
+                    n = nodes.length,
+                    i;
+
+                // Push any overlapping nodes down.
+                nodes.sort(ascendingDepth);
+                for (i = 0; i < n; ++i) {
+                    node = nodes[i];
+                    dy = y0 - node.y;
+                    if (dy > 0) node.y += dy;
+                    y0 = node.y + node.dy + nodePadding;
+                }
+
+                // If the bottommost node goes outside the bounds, push it 
back up.
+                dy = y0 - nodePadding - size[1];
+                if (dy > 0) {
+                    y0 = node.y -= dy;
+
+                    // Push any overlapping nodes back up.
+                    for (i = n - 2; i >= 0; --i) {
+                        node = nodes[i];
+                        dy = node.y + node.dy + nodePadding - y0;
+                        if (dy > 0) node.y -= dy;
+                        y0 = node.y;
+                    }
+                }
+            });
+        }
+
+        function ascendingDepth(a, b) {
+            return a.y - b.y;
+        }
+    }
+
+    function computeLinkDepths() {
+        nodes.forEach(function(node) {
+            node.sourceLinks.sort(ascendingTargetDepth);
+            node.targetLinks.sort(ascendingSourceDepth);
+        });
+        nodes.forEach(function(node) {
+            var sy = 0,
+                ty = 0;
+            node.sourceLinks.forEach(function(link) {
+                link.sy = sy;
+                sy += link.dy;
+            });
+            node.targetLinks.forEach(function(link) {
+                link.ty = ty;
+                ty += link.dy;
+            });
+        });
+
+        function ascendingSourceDepth(a, b) {
+            return a.source.y - b.source.y;
+        }
+
+        function ascendingTargetDepth(a, b) {
+            return a.target.y - b.target.y;
+        }
+    }
+
+    function center(node) {
+        return node.y + node.dy / 2;
+    }
+
+    function value(link) {
+        return link.value;
+    }
+
+    return sankey;
+};

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/sankey.json
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/sankey.json b/Sankey/csvSankey-v4/sankey.json
new file mode 100644
index 0000000..c7e0152
--- /dev/null
+++ b/Sankey/csvSankey-v4/sankey.json
@@ -0,0 +1,295 @@
+{
+    "nodes": [
+        {
+            "name": "Window"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "#document"
+        },
+        {
+            "name": "#document"
+        },
+        {
+            "name": "body.ng-scope"
+        },
+        {
+            "name": "Window"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "div.expand-trigger"
+        },
+        {
+            "name": "Window"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded"
+        },
+        {
+            "name": "div#neon-dashboard.container"
+        },
+        {
+            "name": "Window"
+        },
+        {
+            "name": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "span#add-visualization-plus-sign.glyphicon 
glyphicon-plus-sign"
+        },
+        {
+            "name": "a#add-visualization-link.collapsed dropdown-toggle 
primary"
+        },
+        {
+            "name": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "Window"
+        },
+        {
+            "name": "html"
+        },
+        {
+            "name": "div#start-message.popover-content"
+        },
+        {
+            "name": "p#start-message-text"
+        },
+        {
+            "name": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding"
+        },
+        {
+            "name": "div#navbar-container.container"
+        },
+        {
+            "name": "a#help-dropdown-link.dropdown-toggle navbar-text"
+        }
+    ],
+    "links": [
+        {
+            "sequenceID": "Window->html",
+            "target": 1,
+            "sourceName": "Window",
+            "value": 1,
+            "source": 0,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "html->#document",
+            "target": 3,
+            "sourceName": "html",
+            "value": 1,
+            "source": 2,
+            "targetName": "#document"
+        },
+        {
+            "sequenceID": "#document->html",
+            "target": 1,
+            "sourceName": "#document",
+            "value": 1,
+            "source": 4,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "#document->body.ng-scope",
+            "target": 5,
+            "sourceName": "#document",
+            "value": 1,
+            "source": 3,
+            "targetName": "body.ng-scope"
+        },
+        {
+            "sequenceID": "html->Window",
+            "target": 6,
+            "sourceName": "html",
+            "value": 2,
+            "source": 1,
+            "targetName": "Window"
+        },
+        {
+            "sequenceID": "Window->html",
+            "target": 7,
+            "sourceName": "Window",
+            "value": 1,
+            "source": 6,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "body.ng-scope->html",
+            "target": 7,
+            "sourceName": "body.ng-scope",
+            "value": 1,
+            "source": 5,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "html->div.expand-trigger",
+            "target": 8,
+            "sourceName": "html",
+            "value": 1,
+            "source": 7,
+            "targetName": "div.expand-trigger"
+        },
+        {
+            "sequenceID": "html->Window",
+            "target": 9,
+            "sourceName": "html",
+            "value": 1,
+            "source": 7,
+            "targetName": "Window"
+        },
+        {
+            "sequenceID": "Window->html",
+            "target": 10,
+            "sourceName": "Window",
+            "value": 1,
+            "source": 9,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "div.expand-trigger->div#gridster-div.ng-scope 
gridster gridster-desktop gridster-loaded",
+            "target": 11,
+            "sourceName": "div.expand-trigger",
+            "value": 1,
+            "source": 8,
+            "targetName": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded"
+        },
+        {
+            "sequenceID": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded->div#neon-dashboard.container",
+            "target": 12,
+            "sourceName": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded",
+            "value": 1,
+            "source": 11,
+            "targetName": "div#neon-dashboard.container"
+        },
+        {
+            "sequenceID": "html->Window",
+            "target": 13,
+            "sourceName": "html",
+            "value": 1,
+            "source": 10,
+            "targetName": "Window"
+        },
+        {
+            "sequenceID": 
"div#neon-dashboard.container->a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding",
+            "target": 14,
+            "sourceName": "div#neon-dashboard.container",
+            "value": 1,
+            "source": 12,
+            "targetName": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding"
+        },
+        {
+            "sequenceID": "Window->html",
+            "target": 15,
+            "sourceName": "Window",
+            "value": 1,
+            "source": 13,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding->span#add-visualization-plus-sign.glyphicon glyphicon-plus-sign",
+            "target": 16,
+            "sourceName": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding",
+            "value": 1,
+            "source": 14,
+            "targetName": "span#add-visualization-plus-sign.glyphicon 
glyphicon-plus-sign"
+        },
+        {
+            "sequenceID": "span#add-visualization-plus-sign.glyphicon 
glyphicon-plus-sign->a#add-visualization-link.collapsed dropdown-toggle 
primary",
+            "target": 17,
+            "sourceName": "span#add-visualization-plus-sign.glyphicon 
glyphicon-plus-sign",
+            "value": 1,
+            "source": 16,
+            "targetName": "a#add-visualization-link.collapsed dropdown-toggle 
primary"
+        },
+        {
+            "sequenceID": "a#add-visualization-link.collapsed dropdown-toggle 
primary->div#gridster-div.ng-scope gridster gridster-desktop gridster-loaded",
+            "target": 18,
+            "sourceName": "a#add-visualization-link.collapsed dropdown-toggle 
primary",
+            "value": 1,
+            "source": 17,
+            "targetName": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded"
+        },
+        {
+            "sequenceID": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded->html",
+            "target": 19,
+            "sourceName": "div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded",
+            "value": 1,
+            "source": 18,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "html->Window",
+            "target": 20,
+            "sourceName": "html",
+            "value": 1,
+            "source": 19,
+            "targetName": "Window"
+        },
+        {
+            "sequenceID": "Window->html",
+            "target": 21,
+            "sourceName": "Window",
+            "value": 1,
+            "source": 20,
+            "targetName": "html"
+        },
+        {
+            "sequenceID": "html->div#start-message.popover-content",
+            "target": 22,
+            "sourceName": "html",
+            "value": 1,
+            "source": 21,
+            "targetName": "div#start-message.popover-content"
+        },
+        {
+            "sequenceID": 
"div#start-message.popover-content->p#start-message-text",
+            "target": 23,
+            "sourceName": "div#start-message.popover-content",
+            "value": 1,
+            "source": 22,
+            "targetName": "p#start-message-text"
+        },
+        {
+            "sequenceID": 
"p#start-message-text->a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding",
+            "target": 24,
+            "sourceName": "p#start-message-text",
+            "value": 1,
+            "source": 23,
+            "targetName": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding"
+        },
+        {
+            "sequenceID": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding->div#navbar-container.container",
+            "target": 25,
+            "sourceName": "a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding",
+            "value": 1,
+            "source": 24,
+            "targetName": "div#navbar-container.container"
+        },
+        {
+            "sequenceID": 
"div#navbar-container.container->a#help-dropdown-link.dropdown-toggle 
navbar-text",
+            "target": 26,
+            "sourceName": "div#navbar-container.container",
+            "value": 1,
+            "source": 25,
+            "targetName": "a#help-dropdown-link.dropdown-toggle navbar-text"
+        }
+    ]
+}

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/sankey825.csv
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/sankey825.csv 
b/Sankey/csvSankey-v4/sankey825.csv
new file mode 100644
index 0000000..bc3cc84
--- /dev/null
+++ b/Sankey/csvSankey-v4/sankey825.csv
@@ -0,0 +1 @@
+sequenceID,target,sourceName,targetName,value,source,pathLength,typeChange,type,targetChangeWindow->html,3,Window,html,1,2,1,1,focus,1#document->div.expand-trigger,0,#document,div.expand-trigger,1,1,1,1,load,1html->Window,5,html,Window,1,6,3,1,mouseover,1div.expand-trigger->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,7,div.expand-trigger,div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded,1,4,8,1,scroll,1Window->html,9,Window,html,1,8,1,1,blur,1div#gridster-div.ng-scope
 gridster gridster-desktop gridster-loaded->html,9,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,html,1,10,6,0,mouseover,1html->body.ng-scope,11,html,body.ng-scope,1,12,3,1,mouseover,1body.ng-scope->div.expand-trigger,13,body.ng-scope,div.expand-trigger,1,14,4,1,keydown,1div.expand-trigger->Window,16,div.expand-trigger,Window,1,15,8,1,scroll,1Window->html,18,Window,html,1,17,1,1,resize,1html->div#start-message.popover-content,19,html,div#start-me
 
ssage.popover-content,1,20,3,0,mouseover,1div#start-message.popover-content->h3#start-here-message.popover-title,22,div#start-message.popover-content,h3#start-here-message.popover-title,1,21,11,0,mouseover,1h3#start-here-message.popover-title->div#start-message.popover-content,23,h3#start-here-message.popover-title,div#start-message.popover-content,1,24,11,0,mouseover,1div#start-message.popover-content->p#start-message-text,26,div#start-message.popover-content,p#start-message-text,1,25,11,0,mouseover,1p#start-message-text->div#start-message.popover-content,27,p#start-message-text,div#start-message.popover-content,1,28,12,0,mouseover,1div#start-message.popover-content->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,30,div#start-message.popover-content,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,1,29,11,0,mouseover,1div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded->h3#start-here-message.popover-title,31,div#gridster
 -div.ng-scope gridster gridster-desktop 
gridster-loaded,h3#start-here-message.popover-title,1,32,6,1,click,1h3#start-here-message.popover-title->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,33,h3#start-here-message.popover-title,div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,1,34,11,0,mouseover,1div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded->div#neon-dashboard.container,35,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,div#neon-dashboard.container,1,36,6,0,mouseover,1div#neon-dashboard.container->li.dropdown,38,div#neon-dashboard.container,li.dropdown,1,37,5,0,mouseover,1li.dropdown->a#dataset-dropdown-link.dropdown-toggle
 primary ng-binding,39,li.dropdown,a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding,1,40,10,0,mouseover,1a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding->ul.dropdown-menu,41,a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding,ul.dropdown-menu,1,42
 
,11,1,click,1ul.dropdown-menu->a#select-preset-database.ng-binding,44,ul.dropdown-menu,a#select-preset-database.ng-binding,1,43,11,0,mouseover,1a#select-preset-database.ng-binding->a#dataset-dropdown-link.dropdown-toggle
 primary 
ng-binding,45,a#select-preset-database.ng-binding,a#dataset-dropdown-link.dropdown-toggle
 primary 
ng-binding,1,46,13,1,mouseover,1a#dataset-dropdown-link.dropdown-toggle primary 
ng-binding->a#select-preset-database.ng-binding,48,a#dataset-dropdown-link.dropdown-toggle
 primary 
ng-binding,a#select-preset-database.ng-binding,1,47,11,1,blur,1a#select-preset-database.ng-binding->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,49,a#select-preset-database.ng-binding,div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,1,50,13,1,blur,1div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded->div.contract-trigger,51,div#gridster-div.ng-scope gridster 
gridster-desktop gridster-loaded,div.contract-trigger,1,52,6,1,mous
 
eover,1div.contract-trigger->div#timeline-selector.timeline-selector-chart,53,div.contract-trigger,div#timeline-selector.timeline-selector-chart,1,54,14,1,scroll,1div#timeline-selector.timeline-selector-chart->div.visualization
 
timelineDirective,56,div#timeline-selector.timeline-selector-chart,div.visualization
 timelineDirective,1,55,15,0,mouseover,1div.visualization 
timelineDirective->div.contract-trigger,57,div.visualization 
timelineDirective,div.contract-trigger,1,58,12,1,mouseover,1div.contract-trigger->rect.[object
 SVGAnimatedString],60,div.contract-trigger,rect.[object 
SVGAnimatedString],1,59,17,1,scroll,1rect.[object 
SVGAnimatedString]->span#move-to-bottom-icon2.glyphicon 
glyphicon-chevron-down,61,rect.[object 
SVGAnimatedString],span#move-to-bottom-icon2.glyphicon 
glyphicon-chevron-down,1,62,19,0,mouseover,1span#move-to-bottom-icon2.glyphicon 
glyphicon-chevron-down->rect.[object 
SVGAnimatedString],64,span#move-to-bottom-icon2.glyphicon 
glyphicon-chevron-down,rect.[objec
 t SVGAnimatedString],1,63,13,0,mouseover,1rect.[object 
SVGAnimatedString]->Window,65,rect.[object 
SVGAnimatedString],Window,1,66,18,1,mouseover,1Window->div#gridster-div.ng-scope
 gridster gridster-desktop gridster-loaded,68,Window,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,1,67,1,1,resize,1div#gridster-div.ng-scope gridster 
gridster-desktop gridster-loaded->rect.[object 
SVGAnimatedString],70,div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded,rect.[object 
SVGAnimatedString],1,69,6,0,mouseover,1rect.[object 
SVGAnimatedString]->div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded,71,rect.[object SVGAnimatedString],div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,1,72,18,0,mouseover,1div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded->svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object 
SVGAnimatedString],74,div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded,svg#Ope
 nLayers_Layer_Vector_RootContainer_49_svgRoot.[object 
SVGAnimatedString],1,73,6,0,mouseover,1svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 SVGAnimatedString]->rect.[object 
SVGAnimatedString],75,svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 SVGAnimatedString],rect.[object 
SVGAnimatedString],1,76,17,0,mouseover,1rect.[object 
SVGAnimatedString]->div#visualization-header.text-container 
headers-container,77,rect.[object 
SVGAnimatedString],div#visualization-header.text-container 
headers-container,1,78,19,0,mouseover,1div#visualization-header.text-container 
headers-container->div#widget-title-container.text-container 
options-container,80,div#visualization-header.text-container 
headers-container,div#widget-title-container.text-container 
options-container,1,79,13,0,mouseover,1div#widget-title-container.text-container
 options-container->a#add-visualization-link.collapsed dropdown-toggle 
primary,82,div#widget-title-container.text-container options-container,a#
 add-visualization-link.collapsed dropdown-toggle 
primary,1,81,13,0,mouseover,1a#add-visualization-link.collapsed dropdown-toggle 
primary->li.dropdown,83,a#add-visualization-link.collapsed dropdown-toggle 
primary,li.dropdown,1,84,11,0,mouseover,1li.dropdown->a#dataset-dropdown-link.dropdown-toggle
 primary ng-binding,85,li.dropdown,a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding,1,86,10,0,mouseover,1a#dataset-dropdown-link.dropdown-toggle 
primary 
ng-binding->div.visualization-drag-handle,87,a#dataset-dropdown-link.dropdown-toggle
 primary 
ng-binding,div.visualization-drag-handle,1,88,11,0,mouseover,1div.visualization-drag-handle->div#widget-title-text.header
 text pull-left 
ng-binding,90,div.visualization-drag-handle,div#widget-title-text.header text 
pull-left ng-binding,1,89,10,0,mouseover,1div#widget-title-text.header text 
pull-left ng-binding->span.ng-binding,91,div#widget-title-text.header text 
pull-left ng-binding,span.ng-binding,1,92,14,0,mouseover,1span.ng-bindin
 g->svg.[object SVGAnimatedString],94,span.ng-binding,svg.[object 
SVGAnimatedString],1,93,17,0,mouseover,1svg.[object 
SVGAnimatedString]->rect.[object SVGAnimatedString],95,svg.[object 
SVGAnimatedString],rect.[object 
SVGAnimatedString],1,96,16,0,mouseover,1rect.[object 
SVGAnimatedString]->div.ng-scope superclass ng-isolate-scope,97,rect.[object 
SVGAnimatedString],div.ng-scope superclass 
ng-isolate-scope,1,98,19,0,mouseover,1div.ng-scope superclass 
ng-isolate-scope->div.visualization lineChartDirective,99,div.ng-scope 
superclass ng-isolate-scope,div.visualization 
lineChartDirective,1,100,10,0,mouseover,1div.visualization 
lineChartDirective->div#visualization-header.text-container 
headers-container,102,div.visualization 
lineChartDirective,div#visualization-header.text-container 
headers-container,1,101,12,0,mouseover,1div#visualization-header.text-container 
headers-container->rect.[object 
SVGAnimatedString],104,div#visualization-header.text-container 
headers-container,rect.[object 
 SVGAnimatedString],1,103,13,0,mouseover,1rect.[object 
SVGAnimatedString]->Window,105,rect.[object 
SVGAnimatedString],Window,1,106,18,1,mouseover,1Window->div.ng-scope superclass 
ng-isolate-scope,108,Window,div.ng-scope superclass 
ng-isolate-scope,1,107,1,1,focus,1div.ng-scope superclass 
ng-isolate-scope->svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object 
SVGAnimatedString],110,div.ng-scope superclass 
ng-isolate-scope,svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object 
SVGAnimatedString],1,109,10,0,mouseover,1svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 
SVGAnimatedString]->ul,111,svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 
SVGAnimatedString],ul,1,112,17,1,mouseover,1ul->div.expand-trigger,113,ul,div.expand-trigger,1,114,7,1,click,1div.expand-trigger->div#widget-title-container.text-container
 
options-container,116,div.expand-trigger,div#widget-title-container.text-container
 options-container,1,115,18,1,scroll,1div#widget-title
 -container.text-container 
options-container->span#options-icon.icon-Options_34x34 
neon-sprite,118,div#widget-title-container.text-container 
options-container,span#options-icon.icon-Options_34x34 
neon-sprite,1,117,13,0,mouseover,1span#options-icon.icon-Options_34x34 
neon-sprite->div#open-options-dropdown.dropdown 
pull-right,120,span#options-icon.icon-Options_34x34 
neon-sprite,div#open-options-dropdown.dropdown 
pull-right,1,119,10,0,mouseover,1div#open-options-dropdown.dropdown 
pull-right->div.expand-trigger,121,div#open-options-dropdown.dropdown 
pull-right,div.expand-trigger,1,122,8,1,mouseover,1div.expand-trigger->div#filter-dropdown-list.dropdown
 filter-tray-filters,124,div.expand-trigger,div#filter-dropdown-list.dropdown 
filter-tray-filters,1,123,18,1,scroll,1div#filter-dropdown-list.dropdown 
filter-tray-filters->a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,125,div#filter-dropdown-list.dropdown 
filter-tray-filters,a#filter-dropdown-list-link.dropdown-toggle navbar-t
 ext,1,126,9,0,mouseover,1a#filter-dropdown-list-link.dropdown-toggle 
navbar-text->span#filter-dropdown-text.ng-binding,128,a#filter-dropdown-list-link.dropdown-toggle
 
navbar-text,span#filter-dropdown-text.ng-binding,1,127,10,0,mouseover,1span#filter-dropdown-text.ng-binding->a#filter-dropdown-list-link.dropdown-toggle
 
navbar-text,129,span#filter-dropdown-text.ng-binding,a#filter-dropdown-list-link.dropdown-toggle
 navbar-text,1,130,11,0,mouseover,1a#filter-dropdown-list-link.dropdown-toggle 
navbar-text->span.caret,132,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,span.caret,1,131,10,0,mouseover,1span.caret->a#filter-dropdown-list-link.dropdown-toggle
 navbar-text,133,span.caret,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,1,134,11,0,mouseover,1a#filter-dropdown-list-link.dropdown-toggle 
navbar-text->div#filter-dropdown-list.dropdown 
filter-tray-filters,136,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,div#filter-dropdown-list.dropdown filter-tray-fi
 lters,1,135,10,0,mouseover,1div#filter-dropdown-list.dropdown 
filter-tray-filters->a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,137,div#filter-dropdown-list.dropdown 
filter-tray-filters,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,1,138,9,0,mouseover,1a#filter-dropdown-list-link.dropdown-toggle 
navbar-text->span.caret,140,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,span.caret,1,139,10,0,mouseover,1span.caret->a#filter-dropdown-list-link.dropdown-toggle
 navbar-text,141,span.caret,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,1,142,11,1,click,1a#filter-dropdown-list-link.dropdown-toggle 
navbar-text->div#filter-dropdown-list.dropdown filter-tray-filters 
open,144,a#filter-dropdown-list-link.dropdown-toggle 
navbar-text,div#filter-dropdown-list.dropdown filter-tray-filters 
open,1,143,10,0,mouseover,1div#filter-dropdown-list.dropdown 
filter-tray-filters 
open->ul#filter-dropdown-menu.dropdown-menu,145,div#filter-dropdown-list.dropdown
 filter-
 tray-filters 
open,ul#filter-dropdown-menu.dropdown-menu,1,146,9,0,mouseover,1ul#filter-dropdown-menu.dropdown-menu->li#filter-dropdown-item.filter-tray-item
 filter-tray-filter 
ng-scope,148,ul#filter-dropdown-menu.dropdown-menu,li#filter-dropdown-item.filter-tray-item
 filter-tray-filter 
ng-scope,1,147,10,0,mouseover,1li#filter-dropdown-item.filter-tray-item 
filter-tray-filter ng-scope->span#filter-item-text.filter-label 
ng-binding,150,li#filter-dropdown-item.filter-tray-item filter-tray-filter 
ng-scope,span#filter-item-text.filter-label 
ng-binding,1,149,11,0,mouseover,1span#filter-item-text.filter-label 
ng-binding->li#filter-dropdown-item.filter-tray-item filter-tray-filter 
ng-scope,151,span#filter-item-text.filter-label 
ng-binding,li#filter-dropdown-item.filter-tray-item filter-tray-filter 
ng-scope,1,152,12,0,mouseover,1li#filter-dropdown-item.filter-tray-item 
filter-tray-filter ng-scope->div#open-options-dropdown.dropdown 
pull-right,154,li#filter-dropdown-item.filter-tray-item 
 filter-tray-filter ng-scope,div#open-options-dropdown.dropdown 
pull-right,1,153,11,0,mouseover,1div#open-options-dropdown.dropdown 
pull-right->a#options-dropdown.dropdown-toggle 
navbar-text,155,div#open-options-dropdown.dropdown 
pull-right,a#options-dropdown.dropdown-toggle 
navbar-text,1,156,8,0,mouseover,1a#options-dropdown.dropdown-toggle 
navbar-text->span#options-text,157,a#options-dropdown.dropdown-toggle 
navbar-text,span#options-text,1,158,9,0,mouseover,1span#options-text->a#options-dropdown.dropdown-toggle
 navbar-text,160,span#options-text,a#options-dropdown.dropdown-toggle 
navbar-text,1,159,10,0,mouseover,1a#options-dropdown.dropdown-toggle 
navbar-text->span#options-text,161,a#options-dropdown.dropdown-toggle 
navbar-text,span#options-text,1,162,9,1,click,1span#options-text->a#export-format-text.unselectable,164,span#options-text,a#export-format-text.unselectable,1,163,10,0,mouseover,1a#export-format-text.unselectable->li#export-format-options,166,a#export-format-text.un
 
selectable,li#export-format-options,1,165,11,0,mouseover,1li#export-format-options->label#export-format-btn.btn
 btn-default ng-scope,167,li#export-format-options,label#export-format-btn.btn 
btn-default ng-scope,1,168,10,0,mouseover,1label#export-format-btn.btn 
btn-default ng-scope->li#export-format-options,170,label#export-format-btn.btn 
btn-default 
ng-scope,li#export-format-options,1,169,12,0,mouseover,1li#export-format-options->li#export-all-visualizations,171,li#export-format-options,li#export-all-visualizations,1,172,10,0,mouseover,1li#export-all-visualizations->button#export-all-visualizations-btn.btn
 
btn-default,174,li#export-all-visualizations,button#export-all-visualizations-btn.btn
 btn-default,1,173,10,0,mouseover,1button#export-all-visualizations-btn.btn 
btn-default->ul#expanded-options-dropdown.dropdown-menu,175,button#export-all-visualizations-btn.btn
 
btn-default,ul#expanded-options-dropdown.dropdown-menu,1,176,11,0,mouseover,1ul#expanded-options-dropdown.dropdown-
 
menu->a#theme-selection-label.unselectable,178,ul#expanded-options-dropdown.dropdown-menu,a#theme-selection-label.unselectable,1,177,9,0,mouseover,1a#theme-selection-label.unselectable->ul#expanded-options-dropdown.dropdown-menu,179,a#theme-selection-label.unselectable,ul#expanded-options-dropdown.dropdown-menu,1,180,11,0,mouseover,1ul#expanded-options-dropdown.dropdown-menu->select#select-theme.select-theme
 form-control navbar-indented ng-pristine ng-untouched 
ng-valid,182,ul#expanded-options-dropdown.dropdown-menu,select#select-theme.select-theme
 form-control navbar-indented ng-pristine ng-untouched 
ng-valid,1,181,9,0,mouseover,1select#select-theme.select-theme form-control 
navbar-indented ng-pristine ng-untouched 
ng-valid->ul#expanded-options-dropdown.dropdown-menu,183,select#select-theme.select-theme
 form-control navbar-indented ng-pristine ng-untouched 
ng-valid,ul#expanded-options-dropdown.dropdown-menu,1,184,11,0,mouseover,1ul#expanded-options-dropdown.dropdown-menu->a#sav
 
e-state-button,186,ul#expanded-options-dropdown.dropdown-menu,a#save-state-button,1,185,9,0,mouseover,1a#save-state-button->a#load-state-button,187,a#save-state-button,a#load-state-button,1,188,11,0,mouseover,1a#load-state-button->a#options-dropdown.dropdown-toggle
 navbar-text,190,a#load-state-button,a#options-dropdown.dropdown-toggle 
navbar-text,1,189,11,1,focus,1a#options-dropdown.dropdown-toggle 
navbar-text->a#load-state-button,192,a#options-dropdown.dropdown-toggle 
navbar-text,a#load-state-button,1,191,9,1,blur,1a#load-state-button->svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 
SVGAnimatedString],194,a#load-state-button,svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 
SVGAnimatedString],1,193,11,1,blur,1svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object
 SVGAnimatedString]->div#loadStateModal.load-state modal fade neon-popup 
in,196,svg#OpenLayers_Layer_Vector_RootContainer_49_svgRoot.[object 
SVGAnimatedString],div#loadStateModal.load-stat
 e modal fade neon-popup in,1,195,17,0,mouseover,1div#loadStateModal.load-state 
modal fade neon-popup 
in->div#load-state-footer.modal-footer,197,div#loadStateModal.load-state modal 
fade neon-popup 
in,div#load-state-footer.modal-footer,1,198,9,1,focus,1div#load-state-footer.modal-footer->div#load-state-body.modal-body,199,div#load-state-footer.modal-footer,div#load-state-body.modal-body,1,200,12,0,mouseover,1div#load-state-body.modal-body->select#select-state-to-load.form-control
 ng-pristine ng-untouched 
ng-valid,202,div#load-state-body.modal-body,select#select-state-to-load.form-control
 ng-pristine ng-untouched 
ng-valid,1,201,12,0,mouseover,1select#select-state-to-load.form-control 
ng-pristine ng-untouched ng-valid->div#loadStateModal.load-state modal fade 
neon-popup in,204,select#select-state-to-load.form-control ng-pristine 
ng-untouched ng-valid,div#loadStateModal.load-state modal fade neon-popup 
in,1,203,14,1,mouseover,1div#loadStateModal.load-state modal fade neon-popup 
in->
 select#select-state-to-load.form-control ng-pristine ng-untouched 
ng-valid,205,div#loadStateModal.load-state modal fade neon-popup 
in,select#select-state-to-load.form-control ng-pristine ng-untouched 
ng-valid,1,206,9,1,blur,1select#select-state-to-load.form-control ng-pristine 
ng-untouched ng-valid->select#select-state-to-load.form-control ng-untouched 
ng-valid ng-dirty ng-valid-parse,208,select#select-state-to-load.form-control 
ng-pristine ng-untouched ng-valid,select#select-state-to-load.form-control 
ng-untouched ng-valid ng-dirty 
ng-valid-parse,1,207,14,1,input,1select#select-state-to-load.form-control 
ng-untouched ng-valid ng-dirty ng-valid-parse->div#loadStateModal.load-state 
modal fade neon-popup in,209,select#select-state-to-load.form-control 
ng-untouched ng-valid ng-dirty ng-valid-parse,div#loadStateModal.load-state 
modal fade neon-popup in,1,210,14,1,click,1div#loadStateModal.load-state modal 
fade neon-popup in->div#load-state-footer.modal-footer,211,div#loadStateModal.l
 oad-state modal fade neon-popup 
in,div#load-state-footer.modal-footer,1,212,9,0,mouseover,1div#load-state-footer.modal-footer->button#cancel-btn.btn
 btn-alert,214,div#load-state-footer.modal-footer,button#cancel-btn.btn 
btn-alert,1,213,12,0,mouseover,1button#cancel-btn.btn 
btn-alert->div#load-state-footer.modal-footer,215,button#cancel-btn.btn 
btn-alert,div#load-state-footer.modal-footer,1,216,13,0,mouseover,1div#load-state-footer.modal-footer->button#load-btn.btn
 btn-success,218,div#load-state-footer.modal-footer,button#load-btn.btn 
btn-success,1,217,12,0,mouseover,1button#load-btn.btn 
btn-success->select#select-state-to-load.form-control ng-untouched ng-valid 
ng-dirty ng-valid-parse,219,button#load-btn.btn 
btn-success,select#select-state-to-load.form-control ng-untouched ng-valid 
ng-dirty 
ng-valid-parse,1,220,13,1,mouseover,1select#select-state-to-load.form-control 
ng-untouched ng-valid ng-dirty ng-valid-parse->button#load-btn.btn 
btn-success,221,select#select-state-to-load.f
 orm-control ng-untouched ng-valid ng-dirty ng-valid-parse,button#load-btn.btn 
btn-success,1,222,14,1,blur,1button#load-btn.btn 
btn-success->div.contract-trigger,223,button#load-btn.btn 
btn-success,div.contract-trigger,1,224,13,1,click,1div.contract-trigger->div#loadStateModal.load-state
 modal fade neon-popup,226,div.contract-trigger,div#loadStateModal.load-state 
modal fade neon-popup,1,225,14,1,scroll,1div#loadStateModal.load-state modal 
fade neon-popup->button#load-btn.btn 
btn-success,227,div#loadStateModal.load-state modal fade 
neon-popup,button#load-btn.btn 
btn-success,1,228,9,1,mouseover,1button#load-btn.btn 
btn-success->div.visualization timelineDirective,229,button#load-btn.btn 
btn-success,div.visualization 
timelineDirective,1,230,13,1,blur,1div.visualization 
timelineDirective->div.expand-trigger,231,div.visualization 
timelineDirective,div.expand-trigger,1,232,12,1,mouseover,1div.expand-trigger->rect.[object
 SVGAnimatedString],234,div.expand-trigger,rect.[object SVGAnima
 tedString],1,233,18,1,scroll,1rect.[object 
SVGAnimatedString]->div.expand-trigger,235,rect.[object 
SVGAnimatedString],div.expand-trigger,1,236,19,1,mouseover,1div.expand-trigger->div#widget-title-container.text-container
 
options-container,238,div.expand-trigger,div#widget-title-container.text-container
 options-container,1,237,18,1,scroll,1div#widget-title-container.text-container 
options-container->rect.[object 
SVGAnimatedString],240,div#widget-title-container.text-container 
options-container,rect.[object 
SVGAnimatedString],1,239,13,0,mouseover,1rect.[object 
SVGAnimatedString]->div.gridster-item-resizable-handler 
handle-e,241,rect.[object 
SVGAnimatedString],div.gridster-item-resizable-handler 
handle-e,1,242,18,0,mouseover,1div.gridster-item-resizable-handler 
handle-e->div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded,244,div.gridster-item-resizable-handler 
handle-e,div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded,1,243,9,0,mouseover,1div#gr
 idster-div.ng-scope gridster gridster-desktop 
gridster-loaded->div.gridster-item-resizable-handler 
handle-w,245,div#gridster-div.ng-scope gridster gridster-desktop 
gridster-loaded,div.gridster-item-resizable-handler 
handle-w,1,246,6,0,mouseover,1div.gridster-item-resizable-handler 
handle-w->div.ng-scope superclass 
ng-isolate-scope,248,div.gridster-item-resizable-handler handle-w,div.ng-scope 
superclass ng-isolate-scope,1,247,9,0,mouseover,1div.ng-scope superclass 
ng-isolate-scope->#document,249,div.ng-scope superclass 
ng-isolate-scope,#document,1,250,10,1,wheel,1#document->svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 
SVGAnimatedString],252,#document,svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 
SVGAnimatedString],1,251,2,1,scroll,1svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 SVGAnimatedString]->svg#plot.[object 
SVGAnimatedString],253,svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 SVGAnimatedString],svg#plot.[ob
 ject SVGAnimatedString],1,254,17,0,mouseover,1svg#plot.[object 
SVGAnimatedString]->#document,256,svg#plot.[object 
SVGAnimatedString],#document,1,255,15,1,wheel,1#document->div#filter-builder-inputs.filter
 neon-well form-inline,258,#document,div#filter-builder-inputs.filter neon-well 
form-inline,1,257,2,1,scroll,1div#filter-builder-inputs.filter neon-well 
form-inline->#document,260,div#filter-builder-inputs.filter neon-well 
form-inline,#document,1,259,11,1,wheel,1#document->div.ng-scope 
ng-isolate-scope filter-directive,262,#document,div.ng-scope ng-isolate-scope 
filter-directive,1,261,2,1,scroll,1div.ng-scope ng-isolate-scope 
filter-directive->div.ng-scope superclass ng-isolate-scope,263,div.ng-scope 
ng-isolate-scope filter-directive,div.ng-scope superclass 
ng-isolate-scope,1,264,10,1,wheel,1div.ng-scope superclass 
ng-isolate-scope->div.ag-body-viewport,266,div.ng-scope superclass 
ng-isolate-scope,div.ag-body-viewport,1,265,10,0,mouseover,1div.ag-body-viewport->div#neon-dashb
 
oard.container,267,div.ag-body-viewport,div#neon-dashboard.container,1,268,23,0,mouseover,1div#neon-dashboard.container->div.ag-body-viewport,270,div#neon-dashboard.container,div.ag-body-viewport,1,269,5,0,mouseover,1div.ag-body-viewport->div.ag-cell
 ag-cell-no-focus cell-col-3 ag-cell-value,271,div.ag-body-viewport,div.ag-cell 
ag-cell-no-focus cell-col-3 ag-cell-value,1,272,23,0,mouseover,1div.ag-cell 
ag-cell-no-focus cell-col-3 ag-cell-value->#document,273,div.ag-cell 
ag-cell-no-focus cell-col-3 
ag-cell-value,#document,1,274,26,1,wheel,1#document->div.ag-cell 
ag-cell-no-focus cell-col-3 ag-cell-value,276,#document,div.ag-cell 
ag-cell-no-focus cell-col-3 ag-cell-value,1,275,2,1,scroll,1div.ag-cell 
ag-cell-no-focus cell-col-3 ag-cell-value->span#open/close-options-menu.text 
pull-left ng-binding,277,div.ag-cell ag-cell-no-focus cell-col-3 
ag-cell-value,span#open/close-options-menu.text pull-left 
ng-binding,1,278,26,0,mouseover,1span#open/close-options-menu.text pull-left 
ng-bin
 ding->div.ng-scope superclass 
ng-isolate-scope,280,span#open/close-options-menu.text pull-left 
ng-binding,div.ng-scope superclass 
ng-isolate-scope,1,279,17,0,mouseover,1div.ng-scope superclass 
ng-isolate-scope->svg#plot.[object SVGAnimatedString],281,div.ng-scope 
superclass ng-isolate-scope,svg#plot.[object 
SVGAnimatedString],1,282,10,0,mouseover,1svg#plot.[object 
SVGAnimatedString]->rect.[object SVGAnimatedString],284,svg#plot.[object 
SVGAnimatedString],rect.[object 
SVGAnimatedString],1,283,15,0,mouseover,1rect.[object 
SVGAnimatedString]->svg#plot.[object SVGAnimatedString],285,rect.[object 
SVGAnimatedString],svg#plot.[object 
SVGAnimatedString],1,286,17,0,mouseover,1svg#plot.[object 
SVGAnimatedString]->div.gridster-item-resizable-handler 
handle-s,288,svg#plot.[object 
SVGAnimatedString],div.gridster-item-resizable-handler 
handle-s,1,287,15,0,mouseover,1div.gridster-item-resizable-handler 
handle-s->div.visualization-drag-handle,289,div.gridster-item-resizable-handler 
handle-s,di
 
v.visualization-drag-handle,1,290,9,0,mouseover,1div.visualization-drag-handle->div#widget-title-container.text-container
 
options-container,292,div.visualization-drag-handle,div#widget-title-container.text-container
 
options-container,1,291,10,0,mouseover,1div#widget-title-container.text-container
 options-container->div.visualization 
dataTableDirective,293,div#widget-title-container.text-container 
options-container,div.visualization 
dataTableDirective,1,294,13,0,mouseover,1div.visualization 
dataTableDirective->div.ag-header-cell-label,296,div.visualization 
dataTableDirective,div.ag-header-cell-label,1,295,12,0,mouseover,1div.ag-header-cell-label->div.ng-scope
 superclass ng-isolate-scope,298,div.ag-header-cell-label,div.ng-scope 
superclass ng-isolate-scope,1,297,25,0,mouseover,1div.ng-scope superclass 
ng-isolate-scope->div.ag-cell ag-cell-no-focus cell-col-1 
ag-cell-value,300,div.ng-scope superclass ng-isolate-scope,div.ag-cell 
ag-cell-no-focus cell-col-1 ag-cell-value,1,299,10,0
 ,mouseover,1div.ag-cell ag-cell-no-focus cell-col-1 
ag-cell-value->span.legend-text ng-binding,301,div.ag-cell ag-cell-no-focus 
cell-col-1 ag-cell-value,span.legend-text 
ng-binding,1,302,26,0,mouseover,1span.legend-text ng-binding->rect.[object 
SVGAnimatedString],304,span.legend-text ng-binding,rect.[object 
SVGAnimatedString],1,303,17,0,mouseover,1rect.[object 
SVGAnimatedString]->svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 SVGAnimatedString],305,rect.[object 
SVGAnimatedString],svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 
SVGAnimatedString],1,306,18,0,mouseover,1svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 
SVGAnimatedString]->div#navbar-container.container,308,svg#OpenLayers_Layer_Vector_RootContainer_4126_svgRoot.[object
 SVGAnimatedString],div#navbar-container.container,1,307,17,0,mouseover,1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-senssoft-tap/blob/607675ba/Sankey/csvSankey-v4/sankey825short.csv
----------------------------------------------------------------------
diff --git a/Sankey/csvSankey-v4/sankey825short.csv 
b/Sankey/csvSankey-v4/sankey825short.csv
new file mode 100644
index 0000000..b6ddc0f
--- /dev/null
+++ b/Sankey/csvSankey-v4/sankey825short.csv
@@ -0,0 +1 @@
+sequenceID,target,sourceName,targetName,value,source,pathLength,typeChange,type,targetChangeWindow->html,3,Window,html,1,2,1,1,focus,1#document->div.expand-trigger,0,#document,div.expand-trigger,1,1,1,1,load,1html->Window,5,html,Window,1,6,3,1,mouseover,1div.expand-trigger->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,7,div.expand-trigger,div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded,1,4,8,1,scroll,1Window->html,9,Window,html,1,8,1,1,blur,1div#gridster-div.ng-scope
 gridster gridster-desktop gridster-loaded->html,9,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,html,1,10,6,0,mouseover,1html->body.ng-scope,11,html,body.ng-scope,1,12,3,1,mouseover,1body.ng-scope->div.expand-trigger,13,body.ng-scope,div.expand-trigger,1,14,4,1,keydown,1div.expand-trigger->Window,16,div.expand-trigger,Window,1,15,8,1,scroll,1Window->html,18,Window,html,1,17,1,1,resize,1html->div#start-message.popover-content,19,html,div#start-me
 
ssage.popover-content,1,20,3,0,mouseover,1div#start-message.popover-content->h3#start-here-message.popover-title,22,div#start-message.popover-content,h3#start-here-message.popover-title,1,21,11,0,mouseover,1h3#start-here-message.popover-title->div#start-message.popover-content,23,h3#start-here-message.popover-title,div#start-message.popover-content,1,24,11,0,mouseover,1div#start-message.popover-content->p#start-message-text,26,div#start-message.popover-content,p#start-message-text,1,25,11,0,mouseover,1p#start-message-text->div#start-message.popover-content,27,p#start-message-text,div#start-message.popover-content,1,28,12,0,mouseover,1div#start-message.popover-content->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,30,div#start-message.popover-content,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,1,29,11,0,mouseover,1div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded->h3#start-here-message.popover-title,31,div#gridster
 -div.ng-scope gridster gridster-desktop 
gridster-loaded,h3#start-here-message.popover-title,1,32,6,1,click,1h3#start-here-message.popover-title->div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,33,h3#start-here-message.popover-title,div#gridster-div.ng-scope
 gridster gridster-desktop 
gridster-loaded,1,34,11,0,mouseover,1div#gridster-div.ng-scope gridster 
gridster-desktop 
gridster-loaded->div#neon-dashboard.container,35,div#gridster-div.ng-scope 
gridster gridster-desktop 
gridster-loaded,div#neon-dashboard.container,1,36,6,0,mouseover,1div#neon-dashboard.container->li.dropdown,38,div#neon-dashboard.container,li.dropdown,1,37,5,0,mouseover,1li.dropdown->a#dataset-dropdown-link.dropdown-toggle
 primary ng-binding,39,li.dropdown,a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding,1,40,10,0,mouseover,1a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding->ul.dropdown-menu,41,a#dataset-dropdown-link.dropdown-toggle 
primary ng-binding,ul.dropdown-menu,1,42
 
,11,1,click,1ul.dropdown-menu->a#select-preset-database.ng-binding,44,ul.dropdown-menu,a#select-preset-database.ng-binding,1,43,11,0,mouseover,1a#select-preset-database.ng-binding->a#dataset-dropdown-link.dropdown-toggle
 primary 
ng-binding,45,a#select-preset-database.ng-binding,a#dataset-dropdown-link.dropdown-toggle
 primary ng-binding,1,46,13,1,mouseover,1
\ No newline at end of file

Reply via email to