Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions deploy/packaging/debian/matlab.noarch
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
./usr/local/mdsplus/matlab/MDSarg.m
./usr/local/mdsplus/matlab/MDSplusAPI.m
./usr/local/mdsplus/matlab/NATIVEvalue.m
./usr/local/mdsplus/matlab/mdsFromMatlab.m
./usr/local/mdsplus/matlab/mdsInfo.m
./usr/local/mdsplus/matlab/mdsToMatlab.m
./usr/local/mdsplus/matlab/mdsUseLegacy.m
./usr/local/mdsplus/matlab/mdsUsePython.m
./usr/local/mdsplus/matlab/mdsclose.m
./usr/local/mdsplus/matlab/mdsconnect.m
./usr/local/mdsplus/matlab/mdsdisconnect.m
./usr/local/mdsplus/matlab/mdsFromMatlab.m
./usr/local/mdsplus/matlab/mdsgetmsg.m
./usr/local/mdsplus/matlab/mdsInfo.m
./usr/local/mdsplus/matlab/mdsopen.m
./usr/local/mdsplus/matlab/MDSplusAPI.m
./usr/local/mdsplus/matlab/mdsput.m
./usr/local/mdsplus/matlab/mdstcl.m
./usr/local/mdsplus/matlab/mdstest.m
./usr/local/mdsplus/matlab/mdsToMatlab.m
./usr/local/mdsplus/matlab/mdsUsePython.m
./usr/local/mdsplus/matlab/mdsvalue.m
./usr/local/mdsplus/matlab/private/javaActivate.m
./usr/local/mdsplus/matlab/private/javaConnect.m
./usr/local/mdsplus/matlab/private/javaExecute.m
./usr/local/mdsplus/matlab/private/javaFromMatlab.m
./usr/local/mdsplus/matlab/private/javaToMatlab.m
./usr/local/mdsplus/matlab/private/pythonActivate.m
./usr/local/mdsplus/matlab/private/pythonConnect.m
./usr/local/mdsplus/matlab/private/pythonExecute.m
./usr/local/mdsplus/matlab/private/pythonFromMatlab.m
./usr/local/mdsplus/matlab/private/pythonToMatlab.m
24 changes: 16 additions & 8 deletions deploy/packaging/redhat/matlab.noarch
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
./usr/local/mdsplus/matlab
./usr/local/mdsplus/matlab/MDSarg.m
./usr/local/mdsplus/matlab/MDSplusAPI.m
./usr/local/mdsplus/matlab/NATIVEvalue.m
./usr/local/mdsplus/matlab/mdsFromMatlab.m
./usr/local/mdsplus/matlab/mdsInfo.m
./usr/local/mdsplus/matlab/mdsToMatlab.m
./usr/local/mdsplus/matlab/mdsUseLegacy.m
./usr/local/mdsplus/matlab/mdsUsePython.m
./usr/local/mdsplus/matlab/mdsclose.m
./usr/local/mdsplus/matlab/mdsconnect.m
./usr/local/mdsplus/matlab/mdsdisconnect.m
./usr/local/mdsplus/matlab/mdsFromMatlab.m
./usr/local/mdsplus/matlab/mdsgetmsg.m
./usr/local/mdsplus/matlab/mdsInfo.m
./usr/local/mdsplus/matlab/mdsopen.m
./usr/local/mdsplus/matlab/MDSplusAPI.m
./usr/local/mdsplus/matlab/mdsput.m
./usr/local/mdsplus/matlab/mdstcl.m
./usr/local/mdsplus/matlab/mdstest.m
./usr/local/mdsplus/matlab/mdsToMatlab.m
./usr/local/mdsplus/matlab/mdsUsePython.m
./usr/local/mdsplus/matlab/mdsvalue.m
./usr/local/mdsplus/matlab/private
./usr/local/mdsplus/matlab/private/javaActivate.m
./usr/local/mdsplus/matlab/private/javaConnect.m
./usr/local/mdsplus/matlab/private/javaExecute.m
./usr/local/mdsplus/matlab/private/javaFromMatlab.m
./usr/local/mdsplus/matlab/private/javaToMatlab.m
./usr/local/mdsplus/matlab/private/pythonActivate.m
./usr/local/mdsplus/matlab/private/pythonConnect.m
./usr/local/mdsplus/matlab/private/pythonExecute.m
./usr/local/mdsplus/matlab/private/pythonFromMatlab.m
./usr/local/mdsplus/matlab/private/pythonToMatlab.m
8 changes: 0 additions & 8 deletions matlab/MDSarg.m

This file was deleted.

25 changes: 15 additions & 10 deletions matlab/MDSplusAPI.m
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
classdef MDSplusAPI < handle
% MDSplusAPI new API core for MDSplus
% % e.g.: read signal from remote tree on mds-data-1 using thick client
% setenv('default_tree_path', 'mds-data-1::')
% mdsip = MDSplusAPI();
% mdsip.open('mytree', 7357);
% sig = mdsip.tree.getNode('.signals:channel43').getRecord();
% dat = sig.toFloatArray();
% dim = sig.getDimension().toFloatArray();
% plot(dim, dat)
% e.g.:
% - read signal from remote tree on mds-data-1 using thick client
% setenv('default_tree_path', 'mds-data-1::')
% mdsip = MDSplusAPI();
% mdsip.open('mytree', 7357);
% sig = mdsip.tree.getNode('.signals:channel43').getRecord();
% dat = sig.toFloatArray();
% dim = sig.getDimension().toFloatArray();
% plot(dim, dat)
% - using thin client connection to mds-data-1
% mdsip = MDSplusAPI('mds-data-1')
% ...

properties(SetAccess = private)
con; % java object of the connection
api; % java object of the api
Expand All @@ -25,7 +30,7 @@
% NULL convenient way to create Descriptor[]
% arr = mdsip.toArray(mdsip.compile('1UQ'));
arr = javaArray('mds.data.descriptor.Descriptor', nargin);
for i = 1:nargin
for i = 1 : nargin
arr(i) = varargin{i};
end
end
Expand Down Expand Up @@ -93,7 +98,7 @@ function close(self)
end
function obj = evaluate(self, obj)
% EVALUATE evaluate mdsplus object
% obj = mdsip.evaluate(obj_in);
% obj = mdsip.evaluate(obj_in);
data = self.api.tdiEvaluate(self.tree, obj);
obj = data.getData();
end
Expand Down
7 changes: 0 additions & 7 deletions matlab/NATIVEvalue.m

This file was deleted.

79 changes: 3 additions & 76 deletions matlab/mdsFromMatlab.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,85 +4,12 @@
% argument.
%
% syntax:
% mdsresult=mdsFromMatlab(matlab-native-object)
% mdsresult = mdsFromMatlab(matlab_native_object)
%
info = mdsInfo();
if info.usePython
result = matlab2python(value, info);
result = pythonFromMatlab(value, info);
else
result = matlab2java(value, info);
end
end

function result = matlab2python(value, info)
dtype=class(value);
switch dtype
case 'char'
result = value;
otherwise
switch dtype
case 'single'
dtype='float32';
case 'double'
dtype='float64';
case 'cell'
dtype='str';
end
if info.ispy2 && contains(dtype,'int64')
warning('MDSplus:python2_int64','%s\n',...
'Loss of precision: python2 does not support int64 properly. Try python3 instead.',...
'You can disable this warning with "warning(''off'', ''MDSplus:python2_int64'')"')
value = double(value);
end
if isscalar(value)
f=str2func(strcat('py.numpy.',dtype));
result=f(value);
else
sz = size(value);
result = py.numpy.array(reshape(value,int32(1),prod(int32(sz))),dtype);
if not(numel(sz) == 2 && sz(2) == 1)
result = py.numpy.resize(result, flip(int32(sz)));
result = py.numpy.ascontiguousarray(result);
end
end
end
end

function result = matlab2java(value, ~)
switch class(value)
case 'double'
javaclass = 'MDSplus.Float64';
case 'single'
javaclass = 'MDSplus.Float32';
case 'int64'
javaclass = 'MDSplus.Int64';
case 'uint64'
javaclass = 'MDSplus.Uint64';
case 'int32'
javaclass = 'MDSplus.Int32';
case 'uint32'
javaclass = 'MDSplus.Uint32';
case 'int16'
javaclass = 'MDSplus.Int16';
case 'uint16'
javaclass = 'MDSplus.Uint16';
case 'int8'
javaclass = 'MDSplus.Int8';
case 'uint8'
javaclass = 'MDSplus.Uint8';
case 'cell'
javaclass = 'MDSplus.String';
case 'char'
result = javaObject('MDSplus.String',value);
return
otherwise
result = value;
return
end
sz = size(value);
if isequal(sz, [1,1])
result = javaObject(javaclass,value);
else
result = javaObject(strcat(javaclass,'Array'),reshape(value,[],1),sz);
result = javaFromMatlab(value, info);
end
end
147 changes: 45 additions & 102 deletions matlab/mdsInfo.m
Original file line number Diff line number Diff line change
@@ -1,111 +1,54 @@
function info = mdsInfo(varargin)
% MDSINFO used internally by other functions to retrieve configuration info
global MDSINFO
if ~isempty(MDSINFO)
info = MDSINFO;
else
l = getenv('MDSplus_legacy_behavior');
if strcmp(l,'yes')
MDSplus_legacy_behavior = true;
else
MDSplus_legacy_behavior = false;
end
info.isConnected = false;
info.connection = [];
info.connectedHost = '';
info.usePython = false;
info.isPythonConnection = false;
info.useLegacy = MDSplus_legacy_behavior;
MDSINFO = info;
end
if nargin > 0
MDSINFO.usePython = logical(varargin{1});
end
err = {true,true};
if MDSINFO.usePython
err{1} = setPython();
if ~islogical(err{1})
MDSINFO.usePython = false;
err{2} = setJavaMds();
end
else
err{2} = setJavaMds();
if ~islogical(err{2})
MDSINFO.usePython = true;
err{1} = setPython();
end
global MDSINFO
if ~isempty(MDSINFO)
info = MDSINFO;
else
info.isConnected = false;
info.connection = [];
info.connectedHost = '';
info.usePython = false;
info.isPythonConnection = false;
MDSINFO = info;
end
if nargin > 0
MDSINFO.usePython = logical(varargin{1});
end
err = {true, true};
if MDSINFO.usePython
try
err{1} = pythonActivate();
catch e
err{1} = e;
end
ok = cellfun(@islogical,err);
if ~all(ok)
if ~any(ok)
disp('Unable to connect to MDSplus using either a java bridge or a python bridge')
disp(strcat(' Java error: ',err{2}.message))
disp(strcat(' Python error: ',err{1}.message))
info = [];
MDSINFO = info;
elseif ~ok(2)
disp('Unable to connect to MDSplus using java bridge, using python bridge instead')
disp(strcat(' Java error: ',err{2}.message))
else % ~ok(1)
disp('Unable to connect to MDSplus using python bridge, using python bridge instead')
disp(strcat(' Python error: ',err{1}.message))
end
if ~islogical(err{1})
MDSINFO.usePython = false;
err{2} = javaActivate();
end
end

function err = setPython()
global MDSINFO
persistent cache
if ~isempty(cache)
err = cache;
else
else
err{2} = javaActivate();
if ~islogical(err{2})
MDSINFO.usePython = true;
try
MDSINFO.ispy2 = logical(py.MDSplus.version.ispy2);
err = false;
cache = err;
catch err
err{1} = pythonActivate();
catch e
err{1} = e;
end
end
end

function err = setJavaMds()
persistent cache
if ~isempty(cache)
err = cache;
else
isOctave = (exist ('OCTAVE_VERSION', 'builtin') > 0);
try
MDSPLUS_DIR = getenv('MDSPLUS_DIR');
if ismac
lib = strcat(MDSPLUS_DIR,'/lib/libJavaMds.dylib');
elseif isunix
lib = strcat(MDSPLUS_DIR,'/lib/libJavaMds.so');
elseif ispc
lib = 'C:\WINDOWS\SYSTEM32\JavaMds.dll';
if ~isfile(lib)
if strcmp(computer('arch'),'win64')
lib = fullfile(MDSPLUS_DIR,'bin64','JavaMds.dll');
else
lib = fullfile(MDSPLUS_DIR,'bin32','JavaMds.dll');
end
end
end
if not(isOctave)
java.lang.System.setProperty('JavaMdsLib',lib);
end
p=javaclasspath('-all');
matches = strfind(p,'mdsobjects.jar');
if not(any(vertcat(matches{:})))
javaaddpath(fullfile(MDSPLUS_DIR,'java','classes','mdsobjects.jar'))
end
if isOctave
javaObject('MDSplus.Int32',1);
else
MDSplus.Data.execute('1',javaArray('MDSplus.Data',1));
end
err = false;
cache = err;
catch err
end
ok = cellfun(@islogical, err);
if ~all(ok)
if ~any(ok)
disp('Unable to connect to MDSplus using either a java bridge or a python bridge')
disp(strcat(' Java error: ', err{2}.message))
disp(strcat(' Python error: ', err{1}.message))
info = [];
MDSINFO = info;
elseif ~ok(2)
disp('Unable to connect to MDSplus using java bridge, using python bridge instead')
disp(strcat(' Java error: ', err{2}.message))
else % ~ok(1)
disp('Unable to connect to MDSplus using python bridge, using python bridge instead')
disp(strcat(' Python error: ', err{1}.message))
end
end
end
Loading