52 lines
1.8 KiB
Matlab
52 lines
1.8 KiB
Matlab
classdef Parameter2 < handle
|
|
% PARAMETER2: Represents a physical parameter with mappings between values and indices
|
|
|
|
properties
|
|
name
|
|
values
|
|
length
|
|
physToIndexMap % Rename this from 'getPhysForIndex'
|
|
indexToPhysMap % Rename this from 'getIndexForPhys'
|
|
end
|
|
|
|
methods
|
|
function obj = Parameter2(name, values)
|
|
% Constructor to initialize the Parameter2 object
|
|
obj.name = name;
|
|
obj.values = values;
|
|
obj.length = numel(values);
|
|
|
|
% Initialize the mappings
|
|
obj.physToIndexMap = containers.Map('KeyType', 'double', 'ValueType', 'any');
|
|
obj.indexToPhysMap = containers.Map('KeyType', 'double', 'ValueType', 'any');
|
|
obj = obj.buildMappings();
|
|
end
|
|
|
|
function obj = buildMappings(obj)
|
|
% Build mappings between physical values and indices
|
|
for idx = 1:obj.length
|
|
obj.indexToPhysMap(idx) = obj.values(idx);
|
|
obj.physToIndexMap(obj.values(idx)) = idx;
|
|
end
|
|
end
|
|
|
|
function physVal = getPhysForIndex(obj, idx)
|
|
% Return the physical value corresponding to the index
|
|
if isKey(obj.indexToPhysMap, idx)
|
|
physVal = obj.indexToPhysMap(idx);
|
|
else
|
|
error('Index out of range for parameter %s', obj.name);
|
|
end
|
|
end
|
|
|
|
function idx = getIndexByPhys(obj, physVal)
|
|
% Return the index corresponding to the physical value
|
|
if isKey(obj.physToIndexMap, physVal)
|
|
idx = obj.physToIndexMap(physVal);
|
|
else
|
|
error('Physical value %g not found in parameter %s', physVal, obj.name);
|
|
end
|
|
end
|
|
end
|
|
end
|