annotate cs_overview/static/flowtools/js/pCoordCSstats.js @ 0:8c17aa8032c2 draft

Uploaded
author immport-devteam
date Mon, 27 Feb 2017 12:48:54 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
1 // Copyright (c) 2016 Northrop Grumman.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
2 // All rights reserved.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
3
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
4 /*
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
5 * Initialize variables for parallelCoordinates display
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
6 */
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
7 var pcApp = pcApp || {};
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
8
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
9 pcApp.allSamples = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
10 pcApp.selectedSamples = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
11 pcApp.origData;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
12 pcApp.flowData;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
13 pcApp.updatedData;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
14 pcApp.headers = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
15 pcApp.foreground;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
16 pcApp.background;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
17
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
18 var displayAll = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
19 displayParallelPlot();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
20 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
21 /*
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
22 * Display the Population Legend
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
23 */
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
24 var displaySmpTable = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
25 $('#popTablePC tbody').empty();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
26 pcApp.origData.map(function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
27 $('#popTablePC tbody').append('<tr><td align="center">'
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
28 + '<input type="checkbox" id="' + d.SampleName + '" '
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
29 + 'checked class="popSelectPC" value='
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
30 + d.SampleNumber + '/></td><td title="' + newSmpNames[d.SampleName]
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
31 + '">' + newSmpNames[d.SampleName]
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
32 + '</td><td><span style="background-color:'
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
33 + color_palette[0][d.SampleNumber + 1][0]
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
34 + '">&nbsp;&nbsp;&nbsp;</span></td></tr>');
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
35 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
36
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
37 $('#popSelectAllPC').click(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
38 var checkAll = $("#popSelectAllPC").prop('checked');
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
39 if (checkAll) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
40 $(".popSelectPC").prop("checked", true);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
41 } else {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
42 $(".popSelectPC").prop("checked", false);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
43 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
44 pcApp.selectedSamples = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
45 $('.popSelectPC').each(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
46 if (this.checked) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
47 pcApp.selectedSamples.push(parseInt(this.value));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
48 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
49 })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
50 displayTableGrid();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
51 if (checkAll) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
52 displayParallelPlot();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
53 } else {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
54 updateParallelForeground();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
55 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
56 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
57
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
58 $('.popSelectPC').click(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
59 if ($('.popSelectPC').length == $(".popSelectPC:checked").length) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
60 $('#popSelectAllPC').prop("checked",true);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
61 } else {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
62 $('#popSelectAllPC').prop("checked",false);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
63 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
64 pcApp.selectedSamples = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
65 $('.popSelectPC').each(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
66 if (this.checked) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
67 pcApp.selectedSamples.push(parseInt(this.value));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
68 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
69 })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
70 displayTableGrid();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
71 updateParallelForeground();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
72 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
73 updateSmpTable();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
74 };
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
75
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
76 var updateSmpTable = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
77 $('.popSelectPC').each(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
78 var smp = parseInt(this.value);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
79 if ($.inArray(smp,pcApp.selectedSamples) > -1) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
80 this.checked = true;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
81 } else {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
82 this.checked = false;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
83 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
84 })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
85 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
86
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
87 var displayTableGrid = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
88 var colTable = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
89 colNames = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
90 pctargets = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
91 updatedHeaders = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
92 displayData = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
93 targetCol = 0,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
94 textCol = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
95 colOrder = [],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
96 tableHTML = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
97
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
98 $("#tableDivPC").empty();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
99 pcApp.updatedData = $.extend(true,[],pctablecontent);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
100 pcApp.updatedData.forEach(function(d, idx){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
101 d.SampleName = idx + 1;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
102 delete(d.FileID);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
103 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
104
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
105 updatedHeaders = Object.keys(pcApp.updatedData[0]);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
106 displayData = pcApp.updatedData.filter(function(d,i) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
107 if ($.inArray(i,pcApp.selectedSamples) > -1) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
108 return d;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
109 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
110 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
111
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
112 targetCol = updatedHeaders.length - 2;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
113 updatedHeaders.forEach(function(d,i){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
114 colTable.push("<th>" + d + "</th>");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
115 colNames.push({"data":d});
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
116 if (i < targetCol){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
117 pctargets.push(i);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
118 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
119 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
120 textCol = [targetCol, targetCol + 1];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
121 colOrder = textCol.concat(pctargets);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
122 tableHTML = [
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
123 '<table id="pcTable" class="pctable display compact nowrap" cellspacing="0" width="100%">',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
124 '<thead>',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
125 '<tr>',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
126 colTable.join("\n"),
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
127 '</tr>',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
128 '</thead>',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
129 '</table>',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
130 ];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
131
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
132 $('#tableDivPC').html(tableHTML.join("\n"));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
133 var pcTable = $('#pcTable').DataTable({
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
134 columns: colNames,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
135 data: displayData,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
136 order: [[ targetCol, "asc" ]],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
137 pageLength: 10,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
138 //paging: false,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
139 scrollY: 250,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
140 scrollCollapse: true,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
141 scrollX: true,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
142 dom: '<"top"B>t<"bottom"lip><"clear">',
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
143 columnDefs: [{
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
144 targets: pctargets,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
145 className: "dt-body-right",
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
146 render: function(data,type,row){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
147 return parseFloat(data).toFixed(2) + '%';
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
148 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
149 }, {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
150 targets: [targetCol, targetCol+1],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
151 className: "dt-body-center"
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
152 }, {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
153 targets:[targetCol],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
154 render: function(data, type, row){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
155 return 'Sample' + parseInt(data);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
156 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
157 }],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
158 buttons: [
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
159 'copy', 'pdfHtml5','csvHtml5', 'colvis'
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
160 ],
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
161 colReorder: {order:colOrder},
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
162 select: true
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
163 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
164
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
165 $('#pcTable').on('mouseover', 'tr', function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
166 var data = pcTable.row(this).data();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
167 if (data != undefined) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
168 var smp = parseInt(data.SampleName) - 1;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
169 pcApp.selectedSamples = [smp];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
170 updateParallelForeground();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
171 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
172 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
173 $('#pcTable').on('mouseleave', 'tr', function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
174 pcApp.selectedSamples = [];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
175 $('.popSelectPC').each(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
176 if (this.checked) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
177 pcApp.selectedSamples.push(parseInt(this.value));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
178 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
179 updateParallelForeground();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
180 })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
181 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
182 };
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
183 /*
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
184 * Display The Main Plot
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
185 */
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
186 var displayParallelPlot = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
187 var margin = {top: 30, right: 10, bottom: 10, left: 10},
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
188 h = 300,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
189 w = $("#plotDivPC").width(),
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
190 width = w - margin.left - margin.right,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
191 height = h - margin.top - margin.bottom,
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
192 y = {},
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
193 dragging = {},
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
194 ymax = 0;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
195
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
196 $("#plotDivPC").empty();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
197 $("#plotDivPC").height(h);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
198 var svg = d3.select("#plotDivPC").append("svg")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
199 .attr("width", width + margin.left + margin.right)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
200 .attr("height", height + margin.top + margin.bottom)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
201 .append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
202 .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
203
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
204 var x = d3.scale.ordinal().rangePoints([0, width], 1);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
205 var line = d3.svg.line();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
206 var axis = d3.svg.axis()
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
207 .orient("left")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
208 .tickFormat(d3.format("d"))
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
209 .ticks(5);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
210
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
211 for (var m = 0, n = pcApp.flowData.length; m < n; m++){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
212 for (var p in pcApp.flowData[m]){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
213 if (+pcApp.flowData[m][p] > ymax){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
214 ymax = +pcApp.flowData[m][p];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
215 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
216 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
217 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
218
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
219 // Y axis label
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
220 svg.append("text")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
221 .attr("class", "ylabel")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
222 .attr("transform", "rotate(-90)")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
223 .attr("y", 0 - margin.left)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
224 .attr("x",0 - (height / 2))
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
225 .attr("dy", "1em")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
226 .style("text-anchor", "middle")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
227 .text("Fraction of population in sample");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
228
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
229 var dimensions = d3.keys(pcApp.flowData[0]).filter(function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
230 return (y[d] = d3.scale.linear()
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
231 .domain([0,parseInt(ymax)+1])
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
232 .range([height, 0]));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
233 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
234 x.domain(dimensions);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
235
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
236 function path(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
237 return line(dimensions.map(function(p) { return [x(p), y[p](d[p])]; }));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
238 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
239
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
240 function position(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
241 var v = dragging[d];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
242 return v == null ? x(d) : v;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
243 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
244
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
245 function transition(g) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
246 return g.transition().duration(500);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
247 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
248
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
249 function brush() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
250 var actives = dimensions.filter(function(p) { return !y[p].brush.empty(); });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
251 var extents = actives.map(function(p) { return y[p].brush.extent(); });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
252 var selectedSamples = pcApp.origData.filter(function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
253 var smp = parseInt(d.SampleNumber);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
254 var tf = actives.every(function(p,i) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
255 return extents[i][0] <= pcApp.flowData[smp][p] &&
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
256 pcApp.flowData[smp][p] <= extents[i][1];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
257 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
258 if (tf) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
259 return smp.toString();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
260 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
261 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
262 pcApp.selectedSamples = selectedSamples.map(function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
263 return parseInt(d.SampleNumber);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
264 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
265
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
266 updateParallelForeground();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
267 updateSmpTable()
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
268 displayTableGrid();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
269 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
270 // Display paths in light gray color, to use as reference
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
271 pcApp.background = svg.append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
272 .attr("class", "background")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
273 .selectAll("path")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
274 .data(pcApp.flowData)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
275 .enter().append("path")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
276 .attr("d", path);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
277
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
278 // Add foreground lines for focus, color by population.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
279 pcApp.foreground = svg.append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
280 .attr("class", "foreground")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
281 .selectAll("path")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
282 .data(pcApp.origData)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
283 .enter().append("path")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
284 .attr("d", function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
285 var smp = d.SampleNumber;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
286 return path(pcApp.flowData[smp]); })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
287 .attr("stroke",function(d){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
288 var smp = d.SampleNumber + 1;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
289 return color_palette[0][smp][0];})
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
290 .attr("stroke-width", 1);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
291
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
292 // Add a group element for each dimension.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
293 var g = svg.selectAll(".dimension")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
294 .data(dimensions)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
295 .enter().append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
296 .attr("class", "dimension")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
297 .attr("transform", function(d) { return "translate(" + x(d) + ")"; })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
298 .call(d3.behavior.drag()
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
299 .origin(function(d) { return {x: x(d)}; })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
300 .on("dragstart", function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
301 dragging[d] = x(d);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
302 pcApp.background.attr("visibility", "hidden");})
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
303 .on("drag", function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
304 dragging[d] = Math.min(width, Math.max(0, d3.event.x));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
305 pcApp.foreground.attr("d", path);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
306 dimensions.sort(function(a, b) { return position(a) - position(b); });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
307 x.domain(dimensions);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
308 g.attr("transform", function(d) { return "translate(" + position(d) + ")"; }); })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
309 .on("dragend", function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
310 delete dragging[d];
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
311 transition(d3.select(this)).attr("transform", "translate(" + x(d) + ")");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
312 transition(pcApp.foreground).attr("d", path);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
313 pcApp.background
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
314 .attr("d", path)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
315 .transition()
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
316 .delay(500)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
317 .duration(0)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
318 .attr("visibility", null);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
319 }));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
320
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
321 // Add an axis and title.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
322 g.append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
323 .attr("class", "axis")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
324 .each(function(d) { d3.select(this).call(axis.scale(y[d])); });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
325 g.append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
326 .attr("class", "xlabel")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
327 .append("text")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
328 .style("text-anchor", "middle")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
329 .attr("y", -9)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
330 .text(function(d) { return d; });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
331
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
332 // Add and store a brush for each axis.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
333 g.append("g")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
334 .attr("class", "brush")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
335 .each(function(d) { d3.select(this).call(y[d].brush = d3.svg.brush().y(y[d]).on("brush", brush)); })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
336 .selectAll("rect")
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
337 .attr("x", -8)
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
338 .attr("width", 16);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
339
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
340 // Control line opacity.
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
341 $('#PCline_opacity').on('change', (function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
342 var val = $(this).val();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
343 $('#plotDivPC .foreground path').css('stroke-opacity', val.toString());
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
344 $('#pc_opacity').html((Math.round(val*10000)/100) + "%");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
345 }));
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
346 };
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
347
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
348 var updateParallelForeground = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
349 pcApp.foreground[0].map(function(d) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
350 var smp = parseInt(d['__data__']['SampleNumber'])
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
351 if ($.inArray(smp,pcApp.selectedSamples) < 0) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
352 d.style.display = "none";
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
353 } else {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
354 d.style.display = null;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
355 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
356 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
357 };
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
358 /*
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
359 * Retrieve the data, then call display functions
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
360 */
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
361 var displayParallelCoordinates = function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
362 /* var inputFile = "./csOverview.tsv";
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
363 d3.tsv(inputFile, function(error, data) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
364 if (error) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
365 alert("Problem Retrieving Data");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
366 return;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
367 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
368 */
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
369 pcApp.origData = $.extend(true,[], pctablecontent);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
370 pcApp.headers = Object.keys(pcApp.origData[0]);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
371 pcApp.headers.splice(pcApp.headers.indexOf("FileID"), 1);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
372 pcApp.origData.forEach(function(d,idx){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
373 d.SampleNumber = idx;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
374 // delete d.FileID;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
375 })
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
376 /*
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
377 * For the plot use only the proportion of each
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
378 * population per sample. Store in flowData
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
379 */
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
380 pcApp.flowData = $.extend(true,[],pctablecontent);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
381 pcApp.flowData.forEach(function(d,idx){
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
382 delete d.SampleName;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
383 delete d.FileID;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
384 delete d.Comment;
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
385 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
386 for (var i = 0, j = pcApp.flowData.length; i < j ; i++) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
387 pcApp.allSamples.push(i);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
388 pcApp.selectedSamples.push(i);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
389 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
390 displaySmpTable();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
391 displayTableGrid();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
392 displayParallelPlot();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
393
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
394 $("#resetPCDisplay").on("click",function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
395 var opcty = ".8";
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
396 for (var i = 0, j = pcApp.flowData.length; i < j; i++) {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
397 pcApp.allSamples.push(i);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
398 pcApp.selectedSamples.push(i);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
399 }
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
400 $("#smpSelectAllPC").prop('checked',true);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
401 $(".smpSelectPC").prop("checked",true);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
402
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
403 $('#plotDivPC .foreground path').css('stroke-opacity', opcty);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
404 $('#pc_opacity').html("80%");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
405 $('#PCline_opacity').val(0.8);
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
406
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
407 displaySmpTable();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
408 displayTableGrid();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
409 displayParallelPlot();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
410 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
411
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
412 $(window).on('resize',function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
413 waitForFinalEvent(function() {
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
414 displayAll();
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
415 }, 500, "resizePC");
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
416 });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
417 // });
8c17aa8032c2 Uploaded
immport-devteam
parents:
diff changeset
418 };