Skip to content

Commit 09a132b

Browse files
committed
finished old conversion and plotting
1 parent 46f623b commit 09a132b

6 files changed

Lines changed: 126 additions & 46 deletions

File tree

243 Bytes
Binary file not shown.

+nla/+net/+result/NetworkTestResult.m

Lines changed: 117 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@
6161
% ranking_statistic [String]: Test statistic that will be used in ranking
6262

6363
import nla.TriMatrix nla.TriMatrixDiag
64+
if nargin == 0
65+
return
66+
end
6467

6568
if nargin == 6
6669
obj.test_name = test_name;
@@ -187,17 +190,6 @@ function runDiagnosticPlots(obj, edge_test_options, updated_test_options, edge_t
187190
)];
188191
end
189192

190-
function previous_result_data = loadPreviousData(obj, file)
191-
try
192-
results_file = load(file);
193-
if isa(results_file.results, 'nla.ResultPool') && ~(isfield(results_file.results_as_struct, 'net_atlas') && isfield(results_file.results_as_struct, 'input_struct'))
194-
previous_result_data = results_file.results;
195-
end
196-
catch
197-
198-
end
199-
end
200-
201193
%%
202194
% getters for dependent properties
203195
function value = get.permutation_count(obj)
@@ -217,6 +209,12 @@ function runDiagnosticPlots(obj, edge_test_options, updated_test_options, edge_t
217209
% Convenience method to determine if inputs were correlation coefficients, or "significance" values
218210
value = any(strcmp(obj.noncorrelation_input_tests, obj.test_name));
219211
end
212+
213+
function set.is_noncorrelation_input(obj, ~)
214+
end
215+
216+
function set.permutation_count(obj, ~)
217+
end
220218
%%
221219
end
222220

@@ -343,20 +341,24 @@ function createPValueTriMatrices(obj, number_of_networks, test_method)
343341
end
344342
end
345343

346-
function converted_data_struct = loadOldVersionData(results_struct)
347-
import nla.net.test.results.NetworkTestResult, nla.TriMatrix, nla.TriMatrixDiag
344+
function converted_data_struct = loadOldVersionData(result_struct)
345+
import nla.net.result.NetworkTestResult nla.TriMatrix nla.TriMatrixDiag nla.NetworkAtlas
348346

349-
number_of_results = numel(results_struct.net_results);
347+
number_of_results = numel(result_struct.net_results);
350348
test_options = result_struct.input_struct;
351349

352350
network_test_options = result_struct.net_input_struct;
353351
network_test_options.ranking_method = "Uncorrected";
354-
network_test_options.no_permutations = result_struct.nonpermuted;
355-
network_test_options.full_connectome = result_struct.full_conn;
356-
network_test_options.within_network_pair = result_struct.show_within_net_pair;
352+
network_test_options.no_permutations = network_test_options.nonpermuted;
353+
network_test_options.full_connectome = network_test_options.full_conn;
354+
network_test_options.within_network_pair = network_test_options.within_net_pair;
357355
network_test_options = rmfield(network_test_options, ["nonpermuted", "full_conn", "within_net_pair"]);
358356

359-
network_atlas = result_struct.net_atlas;
357+
network_atlas = NetworkAtlas();
358+
fields = fieldnames(result_struct.net_atlas);
359+
for field_index = 1:numel(fields)
360+
network_atlas.(fields{field_index}) = result_struct.net_atlas.(fields{field_index});
361+
end
360362
number_of_networks = network_atlas.numNets();
361363

362364
converted_data_struct = struct(...
@@ -368,9 +370,13 @@ function createPValueTriMatrices(obj, number_of_networks, test_method)
368370
'commit', result_struct.commit,...
369371
'commit_short', result_struct.commit_short...
370372
);
373+
374+
converted_data_struct.permutation_network_test_results = {};
375+
d = false;
376+
single_sample_d = false;
371377

372-
for result_number = number_of_results
373-
switch results_struct.perm_net_results{result_number}.name
378+
for result_number = 1:number_of_results
379+
switch result_struct.perm_net_results{result_number}.name
374380
case "Chi-Squared"
375381
test_name = "chi_squared";
376382
test_display_name = "Chi-Squared";
@@ -401,46 +407,113 @@ function createPValueTriMatrices(obj, number_of_networks, test_method)
401407
test_display_name = "Wilcoxon Rank Sum";
402408
ranking_statistic = "z_statistic";
403409
is_noncorrelation_input = 0;
410+
case "Cohen's D"
411+
d = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL);
412+
d.v = result_struct.perm_net_results{result_number}.d.v;
413+
single_sample_d = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL);
414+
single_sample_d.v = result_struct.perm_net_results{result_number}.within_np_d.v;
404415
end
405416
new_results_struct = struct(...
406-
"test_name", test_name,...
417+
'test_name', test_name,...
407418
"test_display_name", test_display_name,...
408419
"ranking_statistic", ranking_statistic,...
409420
"is_noncorrelation_input", is_noncorrelation_input,...
410-
"permutation_count", results_struct.perm_net_results{result_number}.perm_count,...
411-
"network_test_results", {}...
421+
"permutation_count", result_struct.perm_net_results{result_number}.perm_count,...
422+
"test_options", test_options...
412423
);
413-
test_methods = [];
414424
no_permutation = struct();
415425
full_connectome = struct();
416426
within_network_pair = struct();
417-
if results_struct.perm_net_results{result_number}.has_nonpermuted
418-
test_methods = [test_methods "no_permutations"];
427+
if result_struct.perm_net_results{result_number}.has_nonpermuted
419428
no_permutation.uncorrected_single_sample_p_value = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL);
420-
no_permutation.uncorrected_single_sample_p_value.v = results_struct.perm_net_results{result_number}.prob.v;
429+
no_permutation.uncorrected_single_sample_p_value.v = result_struct.perm_net_results{result_number}.prob.v;
421430
end
422-
if results_struct.perm_net_results.has_full_conn
423-
test_methods = [test_methods "full_connectome"];
431+
if result_struct.perm_net_results{result_number}.has_full_conn
432+
if ~isequal(d, false)
433+
full_connectome.d = d;
434+
end
424435
full_connectome.uncorrected_two_sample_p_value = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL);
425-
full_connectome.uncorrected_two_sample_p_value.v = results_struct.perm_net_results{result_number}.perm_prob.v;
436+
full_connectome.uncorrected_two_sample_p_value.v = result_struct.perm_net_results{result_number}.perm_prob.v;
426437
end
427-
if results_struct.perm_net_results.has_within_net_pair
428-
test_methods = [test_methods "within_network_pair"];
438+
if result_struct.perm_net_results{result_number}.has_within_net_pair
439+
if ~isequal(single_sample_d, false)
440+
within_network_pair.single_sample_d = single_sample_d;
441+
end
429442
within_network_pair.uncorrected_single_sample_p_value = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL);
430-
within_network_pair.uncorrected_single_sample_p_value.v = results_struct.perm_net_results{result_number}.within_np_prob.v;
443+
within_network_pair.uncorrected_single_sample_p_value.v = result_struct.perm_net_results{result_number}.within_np_prob.v;
431444
end
432-
new_results_struct.test_methods = test_methods;
433-
new_results_struct.test_options = test_options;
434-
435-
permutation_network_test_results = {...
436-
"no_permutation", no_permutations,...
437-
"full_connectome", full_connectome,...
438-
"within_network_pair", within_network_pair,...
439-
"test_methods", test_methods,...
440-
"test_options", test_options...
441-
};
442-
new_results_struct.permutation_network_test_results = permutation_network_test_results;
445+
new_results_struct.no_permutation = no_permutation;
446+
new_results_struct.full_connectome = full_connectome;
447+
new_results_struct.within_network_pair = within_network_pair;
448+
converted_data_struct.permutation_network_test_results = [converted_data_struct.permutation_network_test_results new_results_struct];
443449
end
444450
end
451+
452+
function [previous_result_data, old_data] = loadPreviousData(file)
453+
import nla.net.result.NetworkTestResult
454+
455+
try
456+
results_file = load(file);
457+
458+
% This shouldn't happen, but just in case...
459+
if isa(results_file.results, 'nla.ResultPool') && ~(isfield(results_file.results_as_struct, 'net_atlas') && isfield(results_file.results_as_struct, 'input_struct'))
460+
previous_result_data = results_file.results;
461+
old_data = false;
462+
else
463+
464+
% Turn off some warnings we know are going to trigger with old results
465+
warning('off', 'MATLAB:class:EnumerationNameMissing');
466+
warning('off', 'MATLAB:load:classNotFound');
467+
previous_result_struct = NetworkTestResult().loadOldVersionData(results_file.results_as_struct);
468+
previous_result_struct_edge_class = NetworkTestResult().edgeResultsStructToClasses(previous_result_struct);
469+
previous_result_struct_class = NetworkTestResult().permutationResultsStructToClasses(previous_result_struct_edge_class);
470+
previous_result_data = nla.ResultPool();
471+
props = properties(previous_result_data);
472+
for prop = 1:numel(props)
473+
if isfield(previous_result_struct_class, props{prop})
474+
previous_result_data.(props{prop}) = previous_result_struct_class.(props{prop});
475+
end
476+
end
477+
old_data = true;
478+
end
479+
catch
480+
error("Failure to load results file");
481+
end
482+
warning('on', 'MATLAB:class:EnumerationNameMissing');
483+
warning('on', 'MATLAB:load:classNotFound');
484+
end
485+
486+
function class_results = permutationResultsStructToClasses(structure_in)
487+
new_network_results = cell(1,numel(structure_in.permutation_network_test_results));
488+
for result = 1:numel(structure_in.permutation_network_test_results)
489+
network_result = nla.net.result.NetworkTestResult();
490+
fields = fieldnames(network_result);
491+
for field_index = 1:numel(fields)
492+
if isfield(structure_in.permutation_network_test_results{result}, (fields{field_index})) && ~isequal(fields{field_index}, "test_methods")
493+
network_result.(fields{field_index}) = structure_in.permutation_network_test_results{result}.(fields{field_index});
494+
end
495+
end
496+
new_network_results{result} = network_result;
497+
end
498+
structure_in.permutation_network_test_results = new_network_results;
499+
class_results = structure_in;
500+
end
501+
502+
function class_results = edgeResultsStructToClasses(structure_in)
503+
edge_result = nla.edge.result.Base();
504+
fields = fieldnames(edge_result);
505+
for field_index = 1:numel(fields)
506+
if isfield(structure_in.edge_test_results, fields{field_index})
507+
if isequal(fields{field_index}, "coeff") || isequal(fields{field_index}, "prob") || isequal(fields{field_index}, "prob_sig")
508+
edge_result.(fields{field_index}) = nla.TriMatrix(structure_in.edge_test_results.coeff.size, nla.TriMatrixDiag.KEEP_DIAGONAL);
509+
edge_result.(fields{field_index}).v = structure_in.edge_test_results.(fields{field_index}).v;
510+
else
511+
edge_result.(fields{field_index}) = structure_in.edge_test_results.(fields{field_index});
512+
end
513+
end
514+
end
515+
structure_in.edge_test_results = edge_result;
516+
class_results = structure_in;
517+
end
445518
end
446519
end

+nla/NetworkAtlas.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
% :param space: Optional The mesh that the atlas` ROI locations/parcels are in. Two options - ``TT`` or ``MNI``
1313

1414

15-
properties (SetAccess = private)
16-
nets % This is the net_names
15+
properties
16+
nets
1717
ROIs
1818
ROI_order
1919
name
@@ -24,6 +24,10 @@
2424

2525
methods
2626
function obj = NetworkAtlas(fname)
27+
if nargin == 0
28+
return
29+
end
30+
2731
%% IM structure
2832
if ischar(fname) || isstring(fname)
2933
net_struct = load(fname);

+nla/ResultPool.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
methods
1919
function obj = ResultPool(test_options, network_test_options, network_atlas, edge_test_results,...
2020
network_test_results, permutation_edge_test_results, permutation_network_test_results)
21+
if nargin == 0
22+
return
23+
end
2124
obj.test_options = test_options;
2225
obj.network_test_options = network_test_options;
2326
obj.network_atlas = network_atlas;

NLAResult.mlapp

106 Bytes
Binary file not shown.

NLA_GUI.mlapp

37 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)