Skip to content

Commit

Permalink
Merge pull request #250 from sampsapursiainen/main_development_branch
Browse files Browse the repository at this point in the history
October2023 release
  • Loading branch information
sampsapursiainen authored Oct 11, 2023
2 parents 4453541 + 0e8e166 commit 2bcd38f
Show file tree
Hide file tree
Showing 1,932 changed files with 4,918 additions and 36,685 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@

try

[ electrode_data, electrode_labels ] = import.electrodes_from_dat ( abspath ) ;
[ electrode_data, electrode_labels ] = core.import.electrodes_from_dat ( abspath ) ;

catch err

Expand All @@ -75,7 +75,7 @@

try

[ electrode_data, electrode_labels ] = import.electrodes_from_csv ( abspath ) ;
[ electrode_data, electrode_labels ] = core.import.electrodes_from_csv ( abspath ) ;

catch err

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 6 additions & 0 deletions +core/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# core

Contains things like type definitions, that are used by core Zeffiro
functionality, but also need to be accessed by the other top levels modules in
this repository. This way the [`m/`](../m) folder does not need to be added to
the Matlab path, before these definitions can be accessed.
120 changes: 79 additions & 41 deletions m/ZefSourceModel.m → +core/ZefSourceModel.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,56 @@
Error
end

methods

function self = loadobj ( obj_or_struct )
%
% loadobj
%
% Converts a struct or a ZefSourceModel loaded from a .mat file into a
% valid in-memory object of this type.
%

arguments
obj_or_struct (1,1)
end

classname = string ( class ( obj_or_struct ) ) ;

% Set a default return value if all else fails.

self = core.ZefSourceModel.Hdiv ;

if endsWith ( classname, "ZefSourceModel" )

self = obj_or_struct ;

elseif classname == "struct"

if isfield ( obj_or_struct, "ValueNames" )

self = core.ZefSourceModel.from ( obj_or_struct.ValueNames ) ;

end

end % if

end % function

end % methods

methods (Static)

function source_model = from(p_input)

% A function that creates an instance of the enumeration
% ZefSourceModel based on given p_input. Generates a
% ZefSourceModel.Error on invalid p_input.
% core.ZefSourceModel based on given p_input. Generates a
% core.ZefSourceModel.Error on invalid p_input.

% Assume p_input is invalid. If valid p_input is found, this will
% change to a valid return value.

source_model = ZefSourceModel.Error;
source_model = core.ZefSourceModel.Error;

% Check that we receive p_input.

Expand All @@ -33,28 +71,28 @@
return
end

% Function is idempotent with respect to given ZefSourceModel variants.
% Function is idempotent with respect to given core.ZefSourceModel variants.

if isenum(p_input)

switch p_input
case ZefSourceModel.Error
case core.ZefSourceModel.Error
source_model = p_input;
case ZefSourceModel.Whitney
case core.ZefSourceModel.Whitney
source_model = p_input;
case ZefSourceModel.Hdiv
case core.ZefSourceModel.Hdiv
source_model = p_input;
case ZefSourceModel.StVenant
case core.ZefSourceModel.StVenant
source_model = p_input;
case ZefSourceModel.ContinuousWhitney
case core.ZefSourceModel.ContinuousWhitney
source_model = p_input;
case ZefSourceModel.ContinuousHdiv
case core.ZefSourceModel.ContinuousHdiv
source_model = p_input;
case ZefSourceModel.ContinuousStVenant
case core.ZefSourceModel.ContinuousStVenant
source_model = p_input;
otherwise
warning("I received an enum that is not a ZefSourceModel. Setting erraneous return value.")
source_model = ZefSourceModel.Error;
warning("I received an enum that is not a core.ZefSourceModel. Setting erraneous return value.")
source_model = core.ZefSourceModel.Error;
end

return
Expand All @@ -70,19 +108,19 @@
if isreal(p_input)

if p_input == 1
source_model = ZefSourceModel.Whitney;
source_model = core.ZefSourceModel.Whitney;
elseif p_input == 2
source_model = ZefSourceModel.Hdiv;
source_model = core.ZefSourceModel.Hdiv;
elseif p_input == 3
source_model = ZefSourceModel.StVenant;
source_model = core.ZefSourceModel.StVenant;
elseif p_input == 4
source_model = ZefSourceModel.ContinuousWhitney;
source_model = core.ZefSourceModel.ContinuousWhitney;
elseif p_input == 5
source_model = ZefSourceModel.ContinuousHdiv;
source_model = core.ZefSourceModel.ContinuousHdiv;
elseif p_input == 6
source_model = ZefSourceModel.ContinuousStVenant;
source_model = core.ZefSourceModel.ContinuousStVenant;
else
source_model = ZefSourceModel.Error;
source_model = core.ZefSourceModel.Error;
end

end
Expand All @@ -92,26 +130,26 @@
if ischar(p_input) || isstring(p_input)

if strcmp(p_input, '1')
source_model = ZefSourceModel.Whitney;
source_model = core.ZefSourceModel.Whitney;
elseif strcmp(p_input, '2')
source_model = ZefSourceModel.Hdiv;
source_model = core.ZefSourceModel.Hdiv;
elseif strcmp(p_input, '3')
source_model = ZefSourceModel.StVenant;
source_model = core.ZefSourceModel.StVenant;
elseif strcmp(p_input, '4')
source_model = ZefSourceModel.ContinuousWhitney;
source_model = core.ZefSourceModel.ContinuousWhitney;
elseif strcmp(p_input, '5')
source_model = ZefSourceModel.ContinuousHdiv;
source_model = core.ZefSourceModel.ContinuousHdiv;
elseif strcmp(p_input, '6')
source_model = ZefSourceModel.ContinuousStVenant;
source_model = core.ZefSourceModel.ContinuousStVenant;
else
source_model = ZefSourceModel.Error;
source_model = core.ZefSourceModel.Error;
end

end

% If no valid source model was found along the way…

if source_model == ZefSourceModel.Error
if source_model == core.ZefSourceModel.Error
warning(strcat( ...
"The source model was not set properly. Needs to be initialized with one of the known values ", ...
"{" , num2str(KNOWN_INTEGERS), "}." ...
Expand All @@ -122,10 +160,10 @@

function vars = variants()

% ZefSourceModel.variants
% core.ZefSourceModel.variants
%
% A constant function that generates an array of the variants of the
% ZefSourceModel enumeration.
% core.ZefSourceModel enumeration.
%
% Output:
%
Expand All @@ -138,7 +176,7 @@
% A bit funny, but this is necessary for listing the variants
% without invoking a constructor.

source_model = ZefSourceModel.Hdiv;
source_model = core.ZefSourceModel.Hdiv;

% Generate the list of variants.

Expand All @@ -152,15 +190,15 @@

function str = to_string(variant)

% ZefSourceModel.to_string
% core.ZefSourceModel.to_string
%
% Converts a given ZefSourceModel variant to a string.
% Converts a given core.ZefSourceModel variant to a string.
%
% Input:
%
% - source_model
%
% A ZefSourceModel variant.
% A core.ZefSourceModel variant.
%
% Output
%
Expand All @@ -171,31 +209,31 @@

switch variant

case ZefSourceModel.Whitney
case core.ZefSourceModel.Whitney

str = "Whitney";

case ZefSourceModel.Hdiv
case core.ZefSourceModel.Hdiv

str = "H(div)";

case ZefSourceModel.StVenant
case core.ZefSourceModel.StVenant

str = "St. Venant";

case ZefSourceModel.ContinuousWhitney
case core.ZefSourceModel.ContinuousWhitney

str = "Continuous Whitney";

case ZefSourceModel.ContinuousHdiv
case core.ZefSourceModel.ContinuousHdiv

str = "Continuous H(div)";

case ZefSourceModel.ContinuousStVenant
case core.ZefSourceModel.ContinuousStVenant

str = "Continuous St. Venant";

case ZefSourceModel.Error
case core.ZefSourceModel.Error

str = "Error";

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
zef.reconstruction = cell(0);

z_max_points = zeros(length(z_inverse_results),3);
z_cluster_centres = zeros(length(z_inverse_results),3);
z_max_deviations = zeros(length(z_inverse_results),1);
z_mean_deviations = zeros(length(z_inverse_results),1);

for k = 1 : length(z_inverse_results)

z_max_points(k,:) = examples.studies.decision_making.zef_rec_maximizer(z_inverse_results{k},zef.source_positions);

zef.GMModel.max_n_clusters = max_n_clusters;
zef.GMModel.frame_number = frame_number;
zef.GMModel.credibility = cred_val_rec;
zef.GMModel.n_dynamic_levels = n_dynamic_levels;
zef.GMModel.reg_param = reg_param_rec;
zef.GMModel.max_n_iter = max_iter;
zef.GMModel.tol_val = tol_val_rec;
zef.reconstruction{1} = z_inverse_results{k};

[z_cluster_centres_aux,z_dipole_moments_aux,~,GMModel] = zef_cluster_reconstruction(zef);
[~, max_ind] = max(sqrt(sum(z_dipole_moments_aux.^2,2)));
z_cluster_centres(k,:) = z_cluster_centres_aux(max_ind,:);
z_max_deviations(k,:) = max(sqrt(eigs(GMModel.Sigma(:,:,max_ind))));
z_mean_deviations(k,:) = mean(sqrt(eigs(GMModel.Sigma(:,:,max_ind))));

end

z_ref_points = [z_max_points; z_cluster_centres];
if isequal(supervised_clustering,'on')
load(credibility_data_file_name)
else
credibility_data = cred_val_points*ones(size(z_ref_points,1),1);
end

[I_aux,MahalanobisD,GMModel] = zef_find_clusters(size(z_ref_points,1),z_ref_points,reg_param_points,credibility_data,max_iter,tol_val_points);
[~,max_ind] = max(accumarray(I_aux,ones(size(I_aux))));
J_aux = find(I_aux==max_ind);
Loading

0 comments on commit 2bcd38f

Please sign in to comment.