Skip to content
Snippets Groups Projects
Commit e71a21ea authored by Cristian Galperti's avatar Cristian Galperti Committed by Federico Felici
Browse files

mdsparnumeric generic loader class added

- it should make the same pre load
  tests than MARTe2 #590 version
  except matrix orientation
  (probably unnecessary in matlab)
parent dbf44df7
No related branches found
No related tags found
No related merge requests found
function TP = algo_template_loadtp()
% Setup tunable control params
TP.gain = single(2);
TP.refmodel.gain = 4; % another gain used in referenced model
TP.gain = single(2);
TP.refmodel.gain = 4; % another gain used in referenced model
TP.rowvect = int32([1 2 3]);
TP.colvect = int16([1 2 3]');
TP.matrix = int8([1 2; 3 4]);
end
......@@ -13,6 +13,11 @@ obj=obj.addfpinitfcn('algo_template_loadfp','algo_template_fp');
obj=obj.addtunparamstruct('algo_template_tp', @()algo_template_loadtp());
%% Tunable parameters
obj=obj.addparameter(SCDclass_mdsparnumeric('ks1','gain' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('ks2','refmodel.gain' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('kv1','rowvect' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('kv2','colvect' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
obj=obj.addparameter(SCDclass_mdsparnumeric('km1','matrix' ,'srcsrv','spcpc171.epfl.ch','srctree','martetest'));
%% Wavegens
......
......@@ -172,7 +172,10 @@ classdef SCDclass_mdspar < matlab.mixin.Heterogeneous
end
function [obj,value]=getdatacommon(obj, shot)
obj=obj.actualizegetcmd('mdsvalue(''%s'')', shot);
% TODO: this depends upon selected MATLAB - MDSplus interface
% mdsipmex mdsvalueraw to return uncast MDSplus data
% python interface mdsvalue returns incast MDSplus data
obj=obj.actualizegetcmd('mdsvalueraw(''%s'')', shot);
value=eval(obj.getcommand);
if(~isnumeric(value) && ~isa(obj,'SCDclass_mdsparenum')) % TODO: better handle this exception
......
classdef SCDclass_mdsparnumeric < SCDclass_mdspar
% General purpose numeric loader MDS+ parameter class
properties
end
methods
function obj=SCDclass_mdsparnumeric(srctdimodel, destparam, varargin)
obj@SCDclass_mdspar();
% Constructor parser customization definitions here
obj=obj.parseconstructorcommon(srctdimodel, destparam, varargin);
% Constructor parser customization results here
obj.classname=mfilename;
obj.marteclassname='MDSParameter';
end
function actualizedata(obj, shot)
obj=obj.preactualizecommon(shot);
if ~obj.actualizable, return; end
%%% Actualization checks %%%
% dimensions
sourcedim=size(obj.value);
targetdim=Simulink.data.evalinGlobal(obj.modelname,sprintf('size(%s)',obj.assignvar));
actchk=true;
if numel(sourcedim)~=numel(targetdim)
warning('SCDDScore:mdsparnumeric','%s: number of dimensions not matching, actualization skipped!',obj.modelparam);
% TODO bette handle output ?
sourcedim
targetdim
actchk=false;
end
% handle vector transposition
if numel(sourcedim)==2 && ~isscalar(obj.value)
if (sourcedim(1)==1 && targetdim(2)==1) || (sourcedim(2)==1 && targetdim(1)==1)
% we've a vector to transpose
obj.value=obj.value';
sourcedim=size(obj.value);
% TODO: in the new implementation, use obj.value for
% actualization and not an evaluated command ?
obj.assignstring=sprintf('%s=%s'';',obj.assignvar,obj.getcommand);
end
end
if actchk && ~any(sourcedim == targetdim)
warning('SCDDScore:mdsparnumeric','%s: dimensions not matching, actualization skipped!',obj.modelparam);
% TODO bette handle output ?
sourcedim
targetdim
actchk=false;
end
% type
sourceclass=class(obj.value);
targetclass=Simulink.data.evalinGlobal(obj.modelname,sprintf('class(%s)',obj.assignvar));
if actchk && ~strcmp(sourceclass,targetclass)
warning('SCDDScore:mdsparnumeric','%s: Data types not matching, actualization skipped!',obj.modelparam);
% TODO bette handle output ?
sourceclass
targetclass
actchk=false;
end
% MARTe2 checks matrix orientation, but MDSplus - MATLBA
% interface do not provide in information (matrix
% orientation) to do this. Or, probably, I misunderstood and
% matrix orientation is always preserved
obj.caststring=sprintf('%s=%s;',obj.assignvar,obj.assignvar);
if actchk
obj.postactualizecommon(shot);
end
end
function [obj, value] = getdata(obj, shot)
[obj,value]=obj.getdatacommon(shot);
end
function printinfo(obj)
obj.printinfocommon;
end
function entrystring = genMARTe2entry(obj, shot)
entrystring=obj.genMARTe2entrycommon(shot);
entrystring=[entrystring ' }'];
end
function out = casttomds(obj, in)
out = in;
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment