classdef janis_class < handle
properties (SetAccess = public)
name
testGroup;
end
properties (SetAccess = protected)
members;
sourceDimension = {};
end
methods
function obj = janis_class(className,varargin)
obj.name = className;
obj.members = {};
obj.testGroup = false;
if nargin > 1
for memberCount=1:size(varargin,2)
obj = addMember(obj,varargin{memberCount});
end
end
end
function this = addMember(this,newMember)
if isa(newMember,'janis_pattern')
this.members{size(this.members,1)+1,1} = newMember;
if isempty(this.sourceDimension)
this.sourceDimension = newMember.sourceDimension;
elseif ~isequal(newMember.sourceDimension,this.sourceDimension)
warning(['Image dimension of Member "' newMember.description '" does not match dimension of other members!']);
end
else
throw(MException('janis:WrongPatternClass','This is not a janis pattern class file'));
end
end
function member = getMember(this,memberIndex)
if this.size > 0 && this.size >= memberIndex
member = this.members{memberIndex};
else
throw(MException('janis:MemberIndexOutOfBounds','Index does not match class size'));
end
end
function members = getAllMembers(this)
members = this.members;
end
function s = size(this)
s = size(this.members,1);
end
function loaded = allLoaded(this)
if this.size > 0
loaded = true;
for mem=1:size(this.members,1)
loaded = this.members{mem}.isLoaded;
end
else
loaded = false;
end
end
function this = setDimensionalitiyReduction(this,fsmethod)
try
for mem=1:size(this.members,1)
this.members{mem} = this.members{mem}.setFeatureSelection(fsmethod);
end
catch excep
error('Seems not to be a correct dim. reduction method!')
rethrow(excep);
end
end
function tf = reductionMethodsSet(this)
tf = true;
try
for mem=1:size(this.members,1)
this.members{mem}.getFeatureSelection;
end
catch
tf = false;
end
end
function this = loadAll(this)
for mem=1:size(this.members,1)
this.members{mem} = this.members{mem}.generatePattern;
end
end
function v = voxelsPerSub(this)
if this.allLoaded
v = this.members{1}.getVoxelCount;
else
v = 0;
end
end
function valid = isValid(this)
if this.allLoaded && this.reductionMethodsSet && this.size > 0
valid = true;
v = this.voxelsPerSub;
for mem=1:this.size
if this.members{1}.getVoxelCount ~= v
valid = false;
end
end
else
valid = false;
end
end
function show(this)
fprintf('\nClass: ::: "%s" :::\n',this.name);
fprintf(' Members: %d\n',this.size);
if this.reductionMethodsSet; r = 'Yes'; else r = 'No';
end;
if this.allLoaded; l = 'Yes'; else l = 'No';
end;
fprintf(' Reduction Methods set: %s\n', r);
if l
fprintf(' Images Loaded: %s\n', l);
fprintf(' Voxels per Subject: %d\n', this.voxelsPerSub);
end
end
function showMembers(this)
fprintf('\nMembers of: ::: "%s" :::\n',this.name);
fprintf(' Index Description\n')
fprintf(' ---------------------------------------\n');
for mem=1:size(this.members,1)
fprintf(' %3d.: %s\n', mem, this.members{mem}.description);
end
fprintf(' ---------------------------------------\n');
end
function markerList = getUniqueMarkers(this)
markerList = cell(1,this.size);
for mem=1:size(this.members,1)
markers = struct;
markerList{mem} = this.members{mem}.getUniqueMarkers(markers);
end
end
end
end