Skip to content
Snippets Groups Projects
Commit 474c7874 authored by Olivier Sauter's avatar Olivier Sauter
Browse files

add get_mds_tree_old.m

parent 28217b58
No related branches found
No related tags found
1 merge request!128D3d addons
Pipeline #142103 canceled
function [data,ier,varnames_all,varnames_dot_all] = get_mds_tree(shot, tree, server, toupper, verbose)
%
% SYNTAX:
% data= get_mds_tree(shot, tree, server, toupper,verbose); % full call
% data= get_mds_tree(shot); % defaults to DIII-D
% data= get_mds_tree(shot, 'EFIT01', 'NSTX'); % for NSTX
% data= get_mds_tree(shot, 'NB', 'DIII-D'); % example other tree
%
% PURPOSE: Get entire selected mds tree from mdsplus database.
%
% INPUT: <default>
% shot = shot number
% tree = tree to use <'EFIT01'>
% server = MDS+ database to use: 'DIII-D'(default),'NSTX','EAST',
% 'THOR', 'OPEN'(assumes mdsconnect already called). Other
% inputs invoke mdsconnect(server) to connect to server.
% toupper = 1= all variables made upper case, =-1 all var. made lower case
% [0]= no change, variables made depending on mds case (typical UC)
% verbose = set to 1 to get diagnostic prints during execution
% <1> server= 'NSTX' or 'EAST'; (since can take some time to get)
% <0> server= 'DIII-D' & all others;
%
% OUTPUT:
% data = structure containing all data in MDS+ tree, with same tree
% structure except that 'TOP' replaced by 'tree'
% See: data.allnames for list of all variables in full structure
% Some Extra items added to structure (all lower case)
% data.id = sting array of important data identifyer enf
% data.shot = shot number
% data.server= MDS+ server
% data.allnames= list of variables in structure with path relative to "TOP"
% data.mdsnames= list of variables in structure with full mds path
% ier = error code
%
% WRITTEN BY: Jim Leuer ON 3/1/05 (original name get_mds_tree)
% taken from get_mds_tree.m uses sub-structure to store
%
% USES: eq_mod
% To see MDS structure on HYDRA run traverser
% tested on DIII-D and NSTX data and should work for JET data but not tested
%
% CHANGE LOG: SMF 20140923 - Changed getnci call to use nid_numbers due to
% fullpath not accepting wildcards.
%
% ==========================================================================
if nargin==0
disp('% get_mds_tree needs at least a "shot" argument')
help get_mds_tree
return
end
if nargin < 4
toupper=0;
end
if nargin < 3
server='DIII-D';
end
if nargin < 2
tree= 'EFIT01';
end
if nargin < 5
if strcmp(server,'NSTX') | strcmp(server,'EAST')
verbose=1;
else
verbose=0;
end
end
server = upper(server);
if isempty(toupper) toupper= 0; end
if isempty(server) server= 'DIII-D'; end
if isempty(tree) tree= 'EFIT01'; end
if isempty(verbose)
if strcmp(server,'NSTX') | strcmp(server,'EAST')
verbose=1;
else
verbose=0;
end
end
% -----------------------------------------------
% Open and check conneciton to MDSPLUS data base:
tic
ier= 0; status=1;
mdsisopen=0;
% [shoto,status]=mdsopen('atlas.gat.com::EFIT01',shot)
if strcmp(server,'DIII-D') | strcmp(server,'DIIID') | strcmp(server,'D3D')
status = mdsconnect('atlas.gat.com');
elseif strcmp(server,'EAST')
status = mdsconnect('202.127.204.12'); % NOT SURE THIS WORKS
elseif strcmp(server,'NSTX')
status = mdsconnect('skylark.pppl.gov:8501');
elseif strcmp(server,'KSTAR')
if(strcmp(getenv('HOST'),'datagrid') | strcmp(getenv('HOST'),'ksim2')) % On site at NFRI
mds_server = '172.17.100.200:8300';
else % Offsite
% mds_server = '203.230.125.212:8005'; % not able to connect to NFRI server directly
mds_server = 'kd';
end
status = mdsconnect(mds_server);
elseif strcmp(server,'THOR')
status = mdsconnect('thor');
elseif strcmp(server,'VIDAR')
status = mdsconnect('vidar');
elseif strcmp(server,'OPEN')
disp(['get_mds_tree: Assuming MDSCONNECT already called and MDS is ',server])
status = 1;
else
disp(['get_mds_tree: Attempting to connect to server = ',server])
status = mdsconnect(server);
end
if ~mod(status,2)
ier=1;
disp(['ERROR get_mds_tree: unable to connect to ' server])
data=[];
return;
end
% Calling this twice seems to work better for NSTX (who knows why?)
[shoto,status]=mdsopen(tree,shot);
if(~mod(status,2))
[shoto,status]=mdsopen(tree,shot);
end
if ~mod(status,2)
ier=1;
disp(['ERROR get_mds_tree: unable to open ' tree ' for shot ' ...
int2str(shot)])
data=[];
status=mdsdisconnect;
return;
else
if(verbose)
disp(['% get_mds_tree opened tree, shot: ' tree ' ' int2str(shot)])
end
end
% add identifier string to structure:
data.id= str2mat('mds_efit ', int2str(shot), tree, date);
data.shot= shot;
data.tree= tree;
data.server= server;
data.creator= 'get_mds_tree';
data.allnames= char([]);
data.mdsnames= char([]);
% ===============================================================
% Get List of tree node names using recursive algorithm & store in mds_all
% ===============================================================
mds_all= char([]); % storage of all mds path names below TOP
mds_nam0= ['\' tree '::TOP']; % Top tree name
mds_nam= mds_nam0; % starting tree name
top_num= length(mds_nam);
mds_ot= mds_nam;
while ~isempty(mds_ot)
mds_all= strvcat(mds_all,mds_ot);
mds_ot= mds_sub_tree(mds_ot);
end
% ===============================================================
% Process each name in mds_all for all variables present
% ===============================================================
for kk=1:size(mds_all,1)
% kk=0; kk=kk+1
% kk
mds_nam = deblank(mds_all(kk,:));
mdscmd = ['getnci("\' mds_nam ':*","NID_NUMBER")'];
% mdscmd_dot = ['getnci("\' mds_nam '.*","NID_NUMBER")'];
[mds_nids,mstatus] = mdsvalue(mdscmd);
% [mds_nids_dot,mstatus_dot] = mdsvalue(mdscmd_dot);
if ~mod(mstatus,2) % handle nstx different format
mdscmd = ['getnci("\\\' mds_nam ':*","NID_NUMBER")'];
[mds_nids,mstatus] = mdsvalue(mdscmd);
end
varnames = [];
if mod(mstatus,2)
num_nids = length(mds_nids);
varnames = cell(1,num_nids);
for j=1:num_nids
mdscmd = ['getnci(' num2str(mds_nids(j)) ',"FULLPATH")'];
varnames{j} = char(mdsvalue(mdscmd));
end
else
% fprintf('WARNING get_mds_tree: Bad mds status for command = %s\n',mdscmd);
end
% $$$ if mod(mstatus_dot,2)
% $$$ num_nids_dot = length(mds_nids_dot);
% $$$ varnames_dot = cell(1,num_nids_dot);
% $$$ for j=1:num_nids_dot
% $$$ mdscmd_dot = ['getnci(' num2str(mds_nids_dot(j)) ',"FULLPATH")'];
% $$$ varnames_dot{j} = char(mdsvalue(mdscmd_dot));
% $$$ varnames_dot_all{kk,j} = varnames_dot{j};
% $$$ end
% $$$ end
varnamesc = char(varnames);
idgood = strmatch(upper(mds_nam0),upper(varnamesc));
varnamesc = varnamesc(idgood,:);
data_namesc = varnamesc(:,top_num+2:end);
numvar = size(varnamesc,1);
% loop over all variables
if numvar>=30
tic
for ii= 1:numvar
% ii=0; ii=ii+1;
fullnam= deblank(varnamesc(ii,:));
data.mdsnames= strvcat(data.mdsnames,fullnam);
dat= mdsvalue(fullnam); % Actual value of data
subnam= deblank(data_namesc(ii,:)); %
id= findstr(subnam,':');
subnam(id)= '.';
if toupper==1
subnam= upper(subnam);
elseif toupper==-1
subnam= lower(subnam);
end
totnam= deblank(subnam); % now relative address rather than absolute address allow for data name chg
if toc > 5 | ii==1
if(verbose)
disp(['% get_mds_tree Reading ' int2str(ii) '/', int2str(numvar),' variable: ', totnam]);
end
tic
end % if toc
data.allnames= strvcat(data.allnames,totnam);
str= ['data.' totnam '= dat;'];
eval(str);
end % for ii
elseif numvar>=1 % if numvar >=1
for ii= 1:numvar
fullnam= deblank(varnamesc(ii,:));
data.mdsnames= strvcat(data.mdsnames,fullnam);
dat= mdsvalue(fullnam); % Actual value of data
subnam= deblank(data_namesc(ii,:)); %
id= findstr(subnam,':');
subnam(id)= '.';
if toupper==1
subnam= upper(subnam);
elseif toupper==-1
subnam= lower(subnam);
end
totnam= deblank(subnam);
if ii==1
if(verbose)
disp(['% get_mds_tree Reading ' int2str(ii) '/',int2str(numvar),' variable: ', totnam]);
end
end % if ii
data.allnames= strvcat(data.allnames,totnam);
str= ['data.' totnam '= dat;'];
eval(str);
end % for ii
end % if numvar
end % for kk
if strcmp(server,'NSTX') | strcmp(server,'EAST')
status=mdsdisconnect; % Exit MDS+ if conneced to remote server
end
return
% ========================================================
% Testing
% ========================================================
% Testing SEE test_get_mds_tree
% (WATCH OUT 114504 has problems use 98549 Ferron High Performance)
% data= get_mds_tree(114504);
% data= get_mds_tree(98549, 'EFIT01', 'DIII-D');
% data= get_mds_tree(98549, 'd3d', 'DIII-D');
data= get_mds_tree(98549, [], [], -1);
data= eq_mk_time_last(data); % puts time at end (i.e. (130,1) => (1,130)
shot=98549; tree='EFIT01'; server='DIII-D'; toupper=-1; % make all lc variables
% tree='d3d'; tree='IONS'
data= get_mds_tree(shot, tree, server, toupper);
data= get_mds_tree(98549, [], [], -1);
data= get_mds_tree(shot, tree, 'OPEN', toupper);
filename='/u/leuer/efit/diiid/s98549/g098549.04000' %
read_gfile
shot=98549; tree='IONS'; server='DIII-D'; toupper=-1;
ions= get_mds_tree(shot, tree, server, toupper);
shot=98549; tree='NB'; server='DIII-D'; toupper=-1;
nb= get_mds_tree(shot, tree, server, toupper);
% ========================================================
% Check NSTX:
% shot=110843; tree='EFIT01'; server='NSTX';
data= get_mds_tree(113363, 'EFIT01','NSTX');
data= eq_mk_time_last(data); % puts time at end (i.e. (130,1) => (1,130)
shot=113363; tree='EFIT01'; server='NSTX';
clear data
data= get_mds_tree(shot, tree, server);
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