From 67c987f86537c75f6ba56f84346d1f086ee513f4 Mon Sep 17 00:00:00 2001 From: Jim Pollaro Date: Mon, 6 Jul 2026 15:39:22 -0500 Subject: [PATCH] merge conflict from cherry pick --- +nla/+qualityControl/checkHeadMotion.m | 34 +++++++++++++------- +nla/+qualityControl/checkNormalityWithKS.m | 33 ++++++++++++------- +nla/NetworkAtlas.m | 14 ++++++-- +nla/removeNetworks.m | 3 +- NLAQualityControl.mlapp | Bin 14666 -> 14561 bytes 5 files changed, 57 insertions(+), 27 deletions(-) diff --git a/+nla/+qualityControl/checkHeadMotion.m b/+nla/+qualityControl/checkHeadMotion.m index a09d25c1..c937609a 100755 --- a/+nla/+qualityControl/checkHeadMotion.m +++ b/+nla/+qualityControl/checkHeadMotion.m @@ -1,14 +1,24 @@ -function checkHeadMotion(fig, input_struct, motion) +function checkHeadMotion(fig, input_struct, motion, remove_index) + network_atlas = input_struct.net_atlas; + functional_connectivity = input_struct.func_conn; + if remove_index ~= 0 + [new_netatlas, functional_connectivity] = nla.removeNetworks(input_struct.net_atlas, input_struct.net_atlas.nets(remove_index).name, strcat(input_struct.net_atlas.name, '_-', input_struct.net_atlas.nets(remove_index).name), input_struct.func_conn); + network_atlas = nla.NetworkAtlas(new_netatlas); + if ~isa(functional_connectivity, 'nla.TriMatrix') + functional_connectivity = nla.TriMatrix(functional_connectivity); + end + end + prog = uiprogressdlg(fig, 'Title', 'Generating figures', 'Message', 'Generating head motion figures'); prog.Value = 0.02; - distances = nla.helpers.euclidianDistanceROIs(input_struct.net_atlas); + distances = nla.helpers.euclidianDistanceROIs(network_atlas); prog.Value = 0.75; - [r_vec, p_vec] = corr(motion, input_struct.func_conn.v', 'type', 'Pearson'); + [r_vec, p_vec] = corr(motion, functional_connectivity.v', 'type', 'Pearson'); - prob = nla.TriMatrix(input_struct.net_atlas.numROIs()); - r = nla.TriMatrix(input_struct.net_atlas.numROIs()); - h = nla.TriMatrix(input_struct.net_atlas.numROIs(), 'logical'); + prob = nla.TriMatrix(network_atlas.numROIs()); + r = nla.TriMatrix(network_atlas.numROIs()); + h = nla.TriMatrix(network_atlas.numROIs(), 'logical'); prob.v = p_vec'; r.v = r_vec'; h.v = nla.lib.fdr_bh(prob.v); @@ -25,7 +35,7 @@ function checkHeadMotion(fig, input_struct, motion) ulimit = 0.3; fig = nla.gfx.createFigure(1800, 900); - matrix_plot = nla.gfx.plots.MatrixPlot(fig, "FC-motion correlation (Pearson's r)", r, input_struct.net_atlas.nets,... + matrix_plot = nla.gfx.plots.MatrixPlot(fig, "FC-motion correlation (Pearson's r)", r, network_atlas.nets,... nla.gfx.FigSize.LARGE, 'lower_limit', llimit, 'upper_limit', ulimit); matrix_plot.displayImage(); width = matrix_plot.image_dimensions("image_width"); @@ -35,14 +45,14 @@ function checkHeadMotion(fig, input_struct, motion) ax = subplot('Position', [0.780, 0.540, 0.20, 0.40]); nla.gfx.setTitle(ax, sprintf("FC-motion correlation (Pearson's r) (q < 0.05)\n")); - nla.gfx.drawROIsOnCortex(ax, input_struct.net_atlas, ctx, mesh_alpha, ROI_radius, nla.gfx.ViewPos.DORSAL, false,... + nla.gfx.drawROIsOnCortex(ax, network_atlas, ctx, mesh_alpha, ROI_radius, nla.gfx.ViewPos.DORSAL, false,... nla.gfx.BrainColorMode.NONE); - for col = 1:input_struct.net_atlas.numROIs() - for row = (col + 1):input_struct.net_atlas.numROIs() + for col = 1:network_atlas.numROIs() + for row = (col + 1):network_atlas.numROIs() if h.get(row, col) - pos1 = input_struct.net_atlas.ROIs(row).pos; - pos2 = input_struct.net_atlas.ROIs(col).pos; + pos1 = network_atlas.ROIs(row).pos; + pos2 = network_atlas.ROIs(col).pos; edge_color = nla.gfx.valToColor(r.get(row, col), llimit, ulimit, color_map); diff --git a/+nla/+qualityControl/checkNormalityWithKS.m b/+nla/+qualityControl/checkNormalityWithKS.m index 19ec0634..3bb8eacb 100644 --- a/+nla/+qualityControl/checkNormalityWithKS.m +++ b/+nla/+qualityControl/checkNormalityWithKS.m @@ -1,4 +1,4 @@ -function checkNormalityWithKS(fig, input_struct, test_pool) +function checkNormalityWithKS(fig, input_struct, test_pool, remove_index) prog = uiprogressdlg(... fig, 'Title', 'Checking Normaility', 'Message', 'Running Kolmogorov-Smirnov Test'... @@ -9,25 +9,31 @@ function checkNormalityWithKS(fig, input_struct, test_pool) edge_test_result = test_pool.runEdgeTest(input_struct); prog.Value = 0.5; - ks_result = runKolmogorovSmirnovTest(input_struct, edge_test_result); + ks_result = runKolmogorovSmirnovTest(input_struct, edge_test_result, remove_index); prog.Value = 0.75; - qcKSOutput(ks_result.p, input_struct) + qcKSOutput(ks_result.p, input_struct, remove_index) end -function ks_result = runKolmogorovSmirnovTest(input_struct, edge_result) +function ks_result = runKolmogorovSmirnovTest(input_struct, edge_result, remove_index) import nla.TriMatrix nla.TriMatrixDiag + network_atlas = input_struct.net_atlas; + if remove_index ~= 0 + [new_netatlas] = nla.removeNetworks(input_struct.net_atlas, input_struct.net_atlas.nets(remove_index).name, strcat(input_struct.net_atlas.name, '_-', input_struct.net_atlas.nets(remove_index).name)); + network_atlas = nla.NetworkAtlas(new_netatlas); + end + ks_result = struct(); - number_of_networks = input_struct.net_atlas.numNets(); + number_of_networks = network_atlas.numNets(); ks_result.p = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL); ks_result.ks = TriMatrix(number_of_networks, TriMatrixDiag.KEEP_DIAGONAL); for network1 = 1:number_of_networks for network2 = 1:network1 - network_rho = edge_result.coeff.get(input_struct.net_atlas.nets(network1).indexes,... - input_struct.net_atlas.nets(network2).indexes); + network_rho = edge_result.coeff.get(network_atlas.nets(network1).indexes,... + network_atlas.nets(network2).indexes); [~, p, ks] = kstest(network_rho); ks_result.p.set(network1, network2, p); ks_result.ks.set(network1, network2, ks); @@ -35,7 +41,7 @@ function checkNormalityWithKS(fig, input_struct, test_pool) end end -function qcKSOutput(ks_result_p_value, edge_test_options) +function qcKSOutput(ks_result_p_value, edge_test_options, remove_index) % This will open the qc figure for the KS test network_test_options = nla.net.genBaseInputs(); @@ -45,15 +51,20 @@ function qcKSOutput(ks_result_p_value, edge_test_options) edge_test_options.prob_max = 0.05; default_discrete_colors = 1000; - [~, p_value_max] = network_test_options.fdr_correction.correct(edge_test_options.net_atlas,... - edge_test_options, ks_result_p_value); + network_atlas = edge_test_options.net_atlas; + if remove_index ~= 0 + [new_netatlas] = nla.removeNetworks(edge_test_options.net_atlas, edge_test_options.net_atlas.nets(remove_index).name, strcat(edge_test_options.net_atlas.name, '-', edge_test_options.net_atlas.nets(remove_index).name)); + network_atlas = nla.NetworkAtlas(new_netatlas); + end + + [~, p_value_max] = network_test_options.fdr_correction.correct(network_atlas, edge_test_options, ks_result_p_value); color_map = nla.net.result.NetworkResultPlotParameter.getColormap(default_discrete_colors,... p_value_max); fig = nla.gfx.createFigure(); % Also remember to move this in read the docs - matrix_plot = nla.gfx.plots.MatrixPlot(fig, sprintf("Non-permuted Kolmogorov-Smirnov Test p-value\nSmaller values are less normal"), ks_result_p_value, edge_test_options.net_atlas.nets, nla.gfx.FigSize.LARGE,... + matrix_plot = nla.gfx.plots.MatrixPlot(fig, sprintf("Non-permuted Kolmogorov-Smirnov Test p-value\nSmaller values are less normal"), ks_result_p_value, network_atlas.nets, nla.gfx.FigSize.LARGE,... 'lower_limit', 0.00, 'upper_limit', p_value_max, 'color_map', color_map); matrix_plot.displayImage(); width = matrix_plot.image_dimensions('image_width'); diff --git a/+nla/NetworkAtlas.m b/+nla/NetworkAtlas.m index d47740de..b1023c31 100755 --- a/+nla/NetworkAtlas.m +++ b/+nla/NetworkAtlas.m @@ -12,10 +12,13 @@ % :param space: (Optional) The mesh that the atlas` ROI locations/parcels are in. Two options - ``Talairach (TT)`` or ``Montreal Neurological Institute (MNI)`` properties (SetAccess = private) - nets % This is the net_names - + nets + net_names ROIs + ROI_key + ROI_pos ROI_order + net_colors name space anat = false; @@ -37,7 +40,8 @@ end net_names = net_struct.net_names; - + obj.net_names = net_names; + net_count = numel(net_names); ROI_count = size(net_struct.ROI_key, 1); @@ -45,6 +49,7 @@ if isfield(net_struct, 'net_colors') net_colors = net_struct.net_colors; end + obj.net_colors = net_colors; ROI_positions = zeros(ROI_count, 3); if isfield(net_struct, 'ROI_pos') @@ -60,6 +65,9 @@ net_struct.ROI_order = net_struct.ROI_order(sort_idx); ROI_positions = ROI_positions(sort_idx, :); end + obj.ROI_pos = ROI_positions; + obj.ROI_key = net_struct.ROI_key; + obj.ROI_order = net_struct.ROI_order; %% Network atlas name obj.name = net_struct.name; diff --git a/+nla/removeNetworks.m b/+nla/removeNetworks.m index e8de1295..f16c1c3d 100755 --- a/+nla/removeNetworks.m +++ b/+nla/removeNetworks.m @@ -78,7 +78,8 @@ %% Functional connectivity (optional) if exist('fc_in', 'var') - fc_ordered = fc_in(atlas_in.ROI_order, atlas_in.ROI_order, :); + fc_in_matrix = fc_in.asMatrix(); + fc_ordered = fc_in_matrix(atlas_in.ROI_order, atlas_in.ROI_order, :); fc_reduced = fc_ordered(ROI_mask, ROI_mask, :); ROI_order_inverse(atlas_out.ROI_order) = [1:numel(atlas_out.ROI_order)]'; fc_out = fc_reduced(ROI_order_inverse, ROI_order_inverse, :); diff --git a/NLAQualityControl.mlapp b/NLAQualityControl.mlapp index 97ded08b78c03e85986dc5fa1ccfadf293310396..cfb56c2c9dde121923c8237b248cf3f51fe938aa 100644 GIT binary patch delta 12253 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

y`PpEXuN2hv3G} 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 GI{yckA`7bk