@@ -3,11 +3,18 @@ document.addEventListener('DOMContentLoaded', function() {
3
3
let selectedAlgorithm = 'ETP_SRI_LinearFitting' ;
4
4
let selectedSNR = '10' ;
5
5
let selectedType = 'D_fitted' ;
6
- let selectedRange = 2 ;
6
+ let selectedRange = 10 ;
7
+ let selectedRangeLower = 2 ;
7
8
let selectedRegion = 'Liver' ;
8
9
let selectedSNRRegion = '10' ;
9
10
let selectedTypeRegion = 'D_fitted' ;
10
- let selectedRangeRegion = 2 ;
11
+ let selectedRangeRegion = 10 ;
12
+ let selectedRangeLowerRegion = 2 ;
13
+ const type = {
14
+ "D_fitted" : "Diffusion" ,
15
+ "Dp_fitted" : "Perfusion" ,
16
+ "f_fitted" : "Perfusion Fraction"
17
+ } ;
11
18
12
19
const loadingOverlay = document . getElementById ( 'loadingOverlay' ) ;
13
20
const mainContent = document . getElementsByTagName ( 'main' ) [ 0 ] ;
@@ -25,24 +32,27 @@ document.addEventListener('DOMContentLoaded', function() {
25
32
const algorithmSelect = document . getElementById ( 'algorithm-select' ) ;
26
33
algorithmSelect . addEventListener ( 'change' , function ( event ) {
27
34
selectedAlgorithm = event . target . value ;
28
- updateRange ( '2' )
29
- drawBoxPlot ( data , selectedAlgorithm , selectedSNR , selectedType , selectedRange ) ;
35
+ updateRange ( '10' )
36
+ updateRangeLower ( '2' )
37
+ drawBoxPlot ( ) ;
30
38
} ) ;
31
39
32
40
// Add event listener to SNR select
33
41
const snrSelect = document . getElementById ( 'snr-select' ) ;
34
42
snrSelect . addEventListener ( 'change' , function ( event ) {
35
43
selectedSNR = event . target . value ;
36
- updateRange ( '2' )
37
- drawBoxPlot ( data , selectedAlgorithm , selectedSNR , selectedType , selectedRange ) ;
44
+ updateRange ( '10' )
45
+ updateRangeLower ( '2' )
46
+ drawBoxPlot ( ) ;
38
47
} ) ;
39
48
40
49
// Add event listener to type select
41
50
const typeSelect = document . getElementById ( 'type-select' ) ;
42
51
typeSelect . addEventListener ( 'change' , function ( event ) {
43
52
selectedType = event . target . value ;
44
- updateRange ( '2' )
45
- drawBoxPlot ( data , selectedAlgorithm , selectedSNR , selectedType , selectedRange ) ;
53
+ updateRange ( '10' )
54
+ updateRangeLower ( '2' )
55
+ drawBoxPlot ( ) ;
46
56
} ) ;
47
57
48
58
// Add event listeners to range slider and buttons
@@ -52,9 +62,9 @@ document.addEventListener('DOMContentLoaded', function() {
52
62
const incrementRange = document . getElementById ( 'increment-range' ) ;
53
63
function updateRange ( value ) {
54
64
selectedRange = value ;
55
- rangeValue . textContent = value ;
65
+ // rangeValue.textContent = value;
56
66
rangeSlider . value = value
57
- drawBoxPlot ( data , selectedAlgorithm , selectedSNR , selectedType , selectedRange ) ;
67
+ drawBoxPlot ( ) ;
58
68
}
59
69
60
70
rangeSlider . addEventListener ( 'input' , function ( event ) {
@@ -77,28 +87,63 @@ document.addEventListener('DOMContentLoaded', function() {
77
87
}
78
88
} ) ;
79
89
90
+ // Add event listeners to range slider and buttons
91
+ const rangeSliderLower = document . getElementById ( 'lower-range-slider' ) ;
92
+ const rangeValueLower = document . getElementById ( 'lower-range-value' ) ;
93
+ const decrementRangeLower = document . getElementById ( 'decrement-lower-range' ) ;
94
+ const incrementRangeLower = document . getElementById ( 'increment-lower-range' ) ;
95
+ function updateRangeLower ( value ) {
96
+ selectedRangeLower = value ;
97
+ //rangeValue.textContent = value;
98
+ rangeSliderLower . value = value
99
+ drawBoxPlot ( ) ;
100
+ }
101
+
102
+ rangeSliderLower . addEventListener ( 'input' , function ( event ) {
103
+ updateRangeLower ( event . target . value ) ;
104
+ } ) ;
105
+
106
+ decrementRangeLower . addEventListener ( 'click' , function ( ) {
107
+ let newValue = parseInt ( rangeSlider . value ) - 2 ;
108
+ if ( newValue >= 2 ) {
109
+ rangeSliderLower . value = newValue ;
110
+ updateRangeLower ( newValue ) ;
111
+ }
112
+ } ) ;
113
+
114
+ incrementRangeLower . addEventListener ( 'click' , function ( ) {
115
+ let newValue = parseInt ( rangeSliderLower . value ) + 2 ;
116
+ if ( newValue <= rangeSliderLower . max ) {
117
+ rangeSliderLower . value = newValue ;
118
+ updateRangeLower ( newValue ) ;
119
+ }
120
+ } ) ;
121
+
80
122
// Add event listener to region select
81
123
const regionSelect = document . getElementById ( 'region-select' ) ;
82
124
regionSelect . addEventListener ( 'change' , function ( event ) {
83
125
selectedRegion = event . target . value ;
84
- updateRangeRegion ( '2' )
85
- drawRegionBoxPlot ( data , selectedRegion , selectedSNRRegion , selectedTypeRegion , selectedRangeRegion ) ;
126
+ updateRangeRegion ( '10' )
127
+ updateRangeLowerRegion ( '2' )
128
+ drawRegionBoxPlot ( ) ;
86
129
} ) ;
87
130
88
131
// Add event listener to SNR select
89
132
const snrRegionSelect = document . getElementById ( 'snr-region-select' ) ;
90
133
snrRegionSelect . addEventListener ( 'change' , function ( event ) {
91
134
selectedSNRRegion = event . target . value ;
92
- updateRangeRegion ( '2' )
93
- drawRegionBoxPlot ( data , selectedRegion , selectedSNRRegion , selectedTypeRegion , selectedRangeRegion ) ;
135
+ updateRangeRegion ( '10' )
136
+ updateRangeLowerRegion ( '2' )
137
+ drawRegionBoxPlot ( ) ;
94
138
} ) ;
95
139
96
140
// Add event listener to type select
97
141
const typeRegionSelect = document . getElementById ( 'type-region-select' ) ;
98
142
typeRegionSelect . addEventListener ( 'change' , function ( event ) {
99
143
selectedTypeRegion = event . target . value ;
100
- updateRangeRegion ( '2' )
101
- drawRegionBoxPlot ( data , selectedRegion , selectedSNRRegion , selectedTypeRegion , selectedRangeRegion ) ;
144
+ updateRangeRegion ( '10' )
145
+ updateRangeLowerRegion ( '2' )
146
+ drawRegionBoxPlot ( ) ;
102
147
} ) ;
103
148
104
149
// Add event listeners to range region slider and buttons
@@ -109,9 +154,9 @@ document.addEventListener('DOMContentLoaded', function() {
109
154
110
155
function updateRangeRegion ( value ) {
111
156
selectedRangeRegion = value ;
112
- rangeValueRegion . textContent = value ;
157
+ // rangeValueRegion.textContent = value;
113
158
rangeSliderRegion . value = value
114
- drawRegionBoxPlot ( data , selectedRegion , selectedSNRRegion , selectedTypeRegion , selectedRangeRegion ) ;
159
+ drawRegionBoxPlot ( ) ;
115
160
}
116
161
117
162
rangeSliderRegion . addEventListener ( 'input' , function ( event ) {
@@ -134,6 +179,38 @@ document.addEventListener('DOMContentLoaded', function() {
134
179
}
135
180
} ) ;
136
181
182
+ // Add event listeners to range slider and buttons for region
183
+ const rangeSliderLowerRegion = document . getElementById ( 'lower-range-slider-region' ) ;
184
+ const rangeValueLowerRegion = document . getElementById ( 'lower-range-value-region' ) ;
185
+ const decrementRangeLowerRegion = document . getElementById ( 'decrement-lower-range-region' ) ;
186
+ const incrementRangeLowerRegion = document . getElementById ( 'increment-lower-range-region' ) ;
187
+ function updateRangeLowerRegion ( value ) {
188
+ selectedRangeLowerRegion = value ;
189
+ //rangeValue.textContent = value;
190
+ rangeSliderLowerRegion . value = value
191
+ drawRegionBoxPlot ( ) ;
192
+ }
193
+
194
+ rangeSliderLowerRegion . addEventListener ( 'input' , function ( event ) {
195
+ updateRangeLowerRegion ( event . target . value ) ;
196
+ } ) ;
197
+
198
+ decrementRangeLowerRegion . addEventListener ( 'click' , function ( ) {
199
+ let newValue = parseInt ( rangeSliderRegion . value ) - 2 ;
200
+ if ( newValue >= 2 ) {
201
+ rangeSliderLowerRegion . value = newValue ;
202
+ updateRangeLowerRegion ( newValue ) ;
203
+ }
204
+ } ) ;
205
+
206
+ incrementRangeLowerRegion . addEventListener ( 'click' , function ( ) {
207
+ let newValue = parseInt ( rangeSliderLowerRegion . value ) + 2 ;
208
+ if ( newValue <= rangeSliderLowerRegion . max ) {
209
+ rangeSliderLowerRegion . value = newValue ;
210
+ updateRangeLowerRegion ( newValue ) ;
211
+ }
212
+ } ) ;
213
+
137
214
showLoading ( ) ;
138
215
139
216
Papa . parse ( 'test_output.csv' , {
@@ -143,8 +220,8 @@ document.addEventListener('DOMContentLoaded', function() {
143
220
data = results ;
144
221
hideLoading ( ) ;
145
222
populateOptions ( data ) ;
146
- drawBoxPlot ( data , selectedAlgorithm , selectedSNR , selectedType , selectedRange ) ;
147
- drawRegionBoxPlot ( data , selectedRegion , selectedSNRRegion , selectedTypeRegion , selectedRangeRegion ) ;
223
+ drawBoxPlot ( ) ;
224
+ drawRegionBoxPlot ( ) ;
148
225
149
226
}
150
227
} ) ;
@@ -194,32 +271,37 @@ document.addEventListener('DOMContentLoaded', function() {
194
271
195
272
}
196
273
197
- function drawBoxPlot ( data , selectedAlgorithm , selectedSNR , selectedType , selectedRange ) {
274
+ function drawBoxPlot ( ) {
198
275
let jsonData = data . data . filter ( obj => obj . Algorithm === selectedAlgorithm ) ;
199
- const type = {
200
- "D_fitted" : "Diffusion" ,
201
- "Dp_fitted" : "Perfusion" ,
202
- "f_fitted" : "Perfusion Fraction"
203
- } ;
204
276
205
277
const allD_fittedValues = jsonData
206
278
. filter ( obj => obj . SNR === selectedSNR )
207
279
. map ( obj => obj [ selectedType ] ) ;
208
280
209
- const maxValue = Math . max ( ...allD_fittedValues . map ( Math . abs ) ) ;
281
+ const maxValue = Math . max ( ...allD_fittedValues ) ;
282
+ const minValue = Math . min ( ...allD_fittedValues ) ;
210
283
const groundTruthList = jsonData
211
- . filter ( obj => obj . SNR === selectedSNR )
212
- . map ( obj => obj [ selectedType . slice ( 0 , - 7 ) ] ) ;
284
+ . filter ( obj => obj . SNR === selectedSNR )
285
+ . map ( obj => obj [ selectedType . slice ( 0 , - 7 ) ] ) ;
213
286
let estimatedRange = Math . abs ( maxValue ) / Math . min ( ...groundTruthList )
214
- rangeSlider . max = Math . round ( estimatedRange / 2 ) * 2
287
+ let estimatedRangeLower = Math . abs ( minValue ) / Math . min ( ...groundTruthList )
288
+ if ( minValue < 0 ) {
289
+ rangeValueLower . textContent = minValue . toFixed ( 4 )
290
+ }
291
+ else {
292
+ rangeValueLower . textContent = '0.0000'
293
+ selectedRangeLower = 0 ;
294
+ }
295
+ rangeValue . textContent = maxValue . toFixed ( 4 )
296
+ rangeSlider . max = Math . round ( estimatedRange / 2 ) * 2
297
+ rangeSliderLower . max = Math . round ( estimatedRangeLower / 2 ) * 2
215
298
let plots = [ ] ;
216
299
const regions = new Set ( jsonData . map ( obj => obj . Region ) ) ;
217
300
const uniqueRegionsArray = Array . from ( regions ) ;
218
301
uniqueRegionsArray . forEach ( region => {
219
302
const D_fittedValues = jsonData
220
303
. filter ( obj => obj . Region === region )
221
304
. filter ( obj => obj . SNR === selectedSNR )
222
- . filter ( obj => Math . abs ( obj [ selectedType ] ) < ( Math . abs ( obj [ selectedType . slice ( 0 , - 7 ) ] ) * selectedRange ) )
223
305
. map ( obj => obj [ selectedType ] ) ;
224
306
var plot = {
225
307
y : D_fittedValues ,
@@ -250,54 +332,65 @@ document.addEventListener('DOMContentLoaded', function() {
250
332
} ) ;
251
333
252
334
var layout = {
253
- title : `${ type [ selectedType ] } Box Plots for ${ selectedAlgorithm } algorithm with ${ selectedSNR } SNR`
335
+ title : `${ type [ selectedType ] } Box Plots for ${ selectedAlgorithm } algorithm with ${ selectedSNR } SNR` ,
336
+ yaxis : {
337
+ autorange : false ,
338
+ range : [ - Math . min ( ...groundTruthList ) * selectedRangeLower , Math . min ( ...groundTruthList ) * selectedRange ] ,
339
+ type : 'linear'
340
+ }
254
341
} ;
255
342
256
343
Plotly . newPlot ( 'myDiv' , plots , layout ) ;
257
344
}
258
345
259
- function drawRegionBoxPlot ( data , selectedRegion , selectedSNR , selectedType , selectedRange ) {
346
+ function drawRegionBoxPlot ( ) {
260
347
let jsonData = data . data . filter ( obj => obj . Region === selectedRegion ) ;
261
- const type = {
262
- "D_fitted" : "Diffusion" ,
263
- "Dp_fitted" : "Perfusion" ,
264
- "f_fitted" : "Perfusion Fraction"
265
- } ;
266
348
267
349
const allD_fittedValues = jsonData
268
- . filter ( obj => obj . SNR === selectedSNR )
269
- . map ( obj => obj [ selectedType ] ) ;
350
+ . filter ( obj => obj . SNR === selectedSNRRegion )
351
+ . map ( obj => obj [ selectedTypeRegion ] ) ;
352
+
353
+ const maxValue = Math . max ( ...allD_fittedValues ) ;
354
+ const minValue = Math . min ( ...allD_fittedValues ) ;
270
355
271
- const maxValue = Math . max ( ...allD_fittedValues . map ( Math . abs ) ) ;
272
356
const groundTruthList = jsonData
273
- . filter ( obj => obj . SNR === selectedSNR )
274
- . map ( obj => obj [ selectedType . slice ( 0 , - 7 ) ] ) ;
357
+ . filter ( obj => obj . SNR === selectedSNRRegion )
358
+ . map ( obj => obj [ selectedTypeRegion . slice ( 0 , - 7 ) ] ) ;
275
359
let estimatedRange = Math . abs ( maxValue ) / Math . min ( ...groundTruthList )
276
- rangeSliderRegion . max = Math . round ( estimatedRange / 2 ) * 2
360
+ let estimatedRangeLower = Math . abs ( minValue ) / Math . min ( ...groundTruthList )
361
+ if ( minValue < 0 ) {
362
+ rangeValueLowerRegion . textContent = minValue . toFixed ( 4 )
363
+ }
364
+ else {
365
+ rangeValueLowerRegion . textContent = '0.0000'
366
+ selectedRangeLowerRegion = 0 ;
367
+ }
368
+ rangeValueRegion . textContent = maxValue . toFixed ( 4 )
369
+ rangeSliderRegion . max = Math . round ( estimatedRange / 2 ) * 2
370
+ rangeSliderLowerRegion . max = Math . round ( estimatedRangeLower / 2 ) * 2
277
371
278
372
let plots = [ ] ;
279
373
const algorithms = new Set ( jsonData . map ( obj => obj . Algorithm ) ) ;
280
374
const uniqueAlgorithmsArray = Array . from ( algorithms ) ;
281
375
uniqueAlgorithmsArray . forEach ( algorithm => {
282
376
const D_fittedValues = jsonData
283
377
. filter ( obj => obj . Algorithm === algorithm )
284
- . filter ( obj => obj . SNR === selectedSNR )
285
- . filter ( obj => Math . abs ( obj [ selectedType ] ) < ( Math . abs ( obj [ selectedType . slice ( 0 , - 7 ) ] ) * selectedRange ) )
286
- . map ( obj => obj [ selectedType ] ) ;
378
+ . filter ( obj => obj . SNR === selectedSNRRegion )
379
+ . map ( obj => obj [ selectedTypeRegion ] ) ;
287
380
var plot = {
288
381
y : D_fittedValues ,
289
382
type : 'box' ,
290
383
name : algorithm ,
291
384
marker : {
292
- outliercolor : 'white) ' ,
385
+ outliercolor : 'white' ,
293
386
} ,
294
387
boxpoints : 'Outliers'
295
388
} ;
296
389
plots . push ( plot ) ;
297
390
const groundTruth = jsonData
298
391
. filter ( obj => obj . Algorithm === algorithm )
299
- . filter ( obj => obj . SNR === selectedSNR )
300
- . map ( obj => obj [ selectedType . slice ( 0 , - 7 ) ] ) ;
392
+ . filter ( obj => obj . SNR === selectedSNRRegion )
393
+ . map ( obj => obj [ selectedTypeRegion . slice ( 0 , - 7 ) ] ) ;
301
394
var constantPoint = {
302
395
x : [ algorithm ] ,
303
396
y : groundTruth ,
@@ -313,7 +406,12 @@ document.addEventListener('DOMContentLoaded', function() {
313
406
} ) ;
314
407
315
408
var layout = {
316
- title : `${ type [ selectedType ] } Box Plots for ${ selectedRegion } region with ${ selectedSNR } SNR`
409
+ title : `${ type [ selectedTypeRegion ] } Box Plots for ${ selectedRegion } region with ${ selectedSNR } SNR` ,
410
+ yaxis : {
411
+ autorange : false ,
412
+ range : [ - Math . min ( ...groundTruthList ) * selectedRangeLowerRegion , Math . min ( ...groundTruthList ) * selectedRangeRegion ] ,
413
+ type : 'linear'
414
+ }
317
415
} ;
318
416
319
417
Plotly . newPlot ( 'regionDiv' , plots , layout ) ;
0 commit comments