diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index d3185903ef8b892df159d0a9475a2562f40d2839..803c5c32008bc5a05621019c0348ed7609c2f263 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -993,6 +993,138 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') channels = gdat_data.gdat_params.channels; end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + case {'icds'} + % note: same time array for all at main.data level, then individual at .ec, .nbi levels + % At this stage fill just eccd, later add nbi + sources_avail = {'ec','nbi'}; % can be set in parameter source + % create empty structures for all, so in return one always have same substructres + for i=1:length(sources_avail) + gdat_data.(sources_avail{i}).data = []; + gdat_data.(sources_avail{i}).units = []; + gdat_data.(sources_avail{i}).dim=[]; + gdat_data.(sources_avail{i}).dimunits=[]; + gdat_data.(sources_avail{i}).t=[]; + gdat_data.(sources_avail{i}).x=[]; + gdat_data.(sources_avail{i}).data_fullpath=[]; + gdat_data.(sources_avail{i}).label=[]; + end + if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) + gdat_data.gdat_params.source = sources_avail; + elseif ~iscell(gdat_data.gdat_params.source) + if ischar(gdat_data.gdat_params.source) + gdat_data.gdat_params.source = lower(gdat_data.gdat_params.source); + if ~any(strmatch(gdat_data.gdat_params.source,lower(sources_avail))) + if (gdat_params.nverbose>=1) + warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]); + end + return + else + gdat_data.gdat_params.source = {gdat_data.gdat_params.source}; + end + else + if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end + return + end + else + for i=1:length(gdat_data.gdat_params.source) + gdat_data.gdat_params.source{i} = lower(gdat_data.gdat_params.source{i}); + if ~any(strmatch(gdat_data.gdat_params.source{i},lower(sources_avail))) + if gdat_data.gdat_params.nverbose>=1 + warning(['source = ' gdat_data.gdat_params.source{i} ' not expected with data_request= ' data_request_eff]) + end + end + end + end + % create structure for icd sources from params and complete with defaults + source_icd.ec = 'toray'; + source_icd.nbi = ''; + for i=1:length(gdat_data.gdat_params.source) + if ~isfield(gdat_data.gdat_params,['source_' gdat_data.gdat_params.source{i}]) + gdat_data.gdat_params.(['source_' gdat_data.gdat_params.source{i}]) = source_icd.(gdat_data.gdat_params.source{i}); + else + source_icd.(gdat_data.gdat_params.source{i}) = gdat_data.gdat_params.(['source_' gdat_data.gdat_params.source{i}]); + end + end + + mdsopen(shot); + % add each source in main.data, on ohm time array + gdat_data.units = 'A'; + gdat_data.label=[]; % label was defined in tcv_mapping_request as char so replace to allow cells + % + if any(strmatch('ec',gdat_data.gdat_params.source)) + data_fullpath = ''; + ec_help = ''; + % EC + if strcmp(lower(source_icd.ec),'toray') + [ptot,icdtot] = astra_tcv_EC_exp(shot); % centralized function for toray nodes + data_fullpath = 'from toray nodes using astra_tcv_EC_exp(shot)'; + ec_help = 'from toray icdint with extracting of effective Icd for given launcher depending on nb rays used'; + if isfield(icdtot,'tgrid'); icdtot.t = icdtot.tgrid; end + if isfield(icdtot,'data'); + icdtot.data = icdtot.data * 1e6; % MA -> A + icdtot.data = icdtot.data'; + icdtot.data(:,end+1) = sum(icdtot.data,2); + end + else + disp(['source_icd.ec = ' source_icd.ec ' not yet implemented, ask O. Sauter']) + return + end + if isempty(icdtot.data) || isempty(icdtot.t) || ischar(icdtot.data) + if (gdat_params.nverbose>=1) + warning(['problems loading data for ' source_icd.ec ... + ' for data_request= ' data_request_eff]); + end + else + gdat_data.ec.data = icdtot.data; + gdat_data.ec.units = 'A'; + gdat_data.ec.dim{1} = icdtot.t; + gdat_data.ec.dim{2} = [1:size(gdat_data.ec.data,2)]; + gdat_data.ec.dimunits={'s','launcher i, total'}; + gdat_data.ec.t=gdat_data.ec.dim{1}; + gdat_data.ec.x=gdat_data.ec.dim{2}; + gdat_data.ec.data_fullpath = data_fullpath; + gdat_data.ec.label='I_{cd}'; + gdat_data.ec.help = ec_help; + % add to main, assume 1st one so just use this time base + gdat_data.data(:,end+1) = gdat_data.ec.data(:,end); + gdat_data.t = gdat_data.ec.t; + gdat_data.x(end+1) = 1; + gdat_data.label{end+1}=gdat_data.ec.label; % label was defined in tcv_mapping_request as char so replace 1st time + end + end + % + if any(strmatch('nb',gdat_data.gdat_params.source)) + NBH_in_TCV = 0; + if shot >= 51641 + % NBI + moderemote = mdsdata('data(\VSYSTEM::TCV_NBHDB_B["NBI:MODEREMOTE_RB"])'); + lcs_mode = mdsdata('data(\VSYSTEM::TCV_NBHDB_I["NBI:LCS_MODE"])'); + % NBH in TCV equiv moderemote='OK' AND lcs_mode = 9 + NBH_in_TCV = strcmpi(strtrim(moderemote),'OK') && lcs_mode == 9; + else + % Nodes used in previous block only exist outside of Vista for shots after 51641 + if any(shot == [51458 51459 51460 51461 51463 51465 51470 51472 ... % 29.JAN.2016 + 51628 51629 51631 51632 51633 ... % 09.FEB.2016 + 51639 51640 ... 51641 % 10.FEB.2016 + ]) + NBH_in_TCV = 1; + end + end + if NBH_in_TCV + % should add reading from file at this stage ala summary Karpushov + end + end + % + % add all to last index of .data(:,i) + gdat_data.data(:,end+1) = sum(gdat_data.data(:,:),2); + gdat_data.x(end+1) = size(gdat_data.data,2); + gdat_data.label{end+1}='total current'; + gdat_data.dim{1} = gdat_data.t; + gdat_data.dim{2} = gdat_data.x; + gdat_data.dimunits = {'s', 'index for each source + total CD'}; + gdat_data.data_fullpath = 'see in individual source substructure'; + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'mhd'} if isfield(gdat_data.gdat_params,'nfft') && ~isempty(gdat_data.gdat_params.nfft) diff --git a/crpptbx/TCV/tcv_help_parameters.m b/crpptbx/TCV/tcv_help_parameters.m index 05790029f30cffcfd20ba3b0435f6b912f9f4345..5a7d2f5f561e05e6da6bf0d8f9c25c533d51c5bf 100644 --- a/crpptbx/TCV/tcv_help_parameters.m +++ b/crpptbx/TCV/tcv_help_parameters.m @@ -43,7 +43,10 @@ help_struct_all.source = sprintf('%s\n','cxrs: [1 2 3] (default systems);', ... 'sxr: main source: ''MPX'' (default) or ''XTOMO'', case insensitive', ... 'mhd request: ''23'':23 LFS/HFS (default), ''23full'': 23cm sector 3 and 11, ''0'':z=0 LFS/HFS, ''0full'': 0cm sector 3 and 11', ... 'powers: ohmic in any case + ''ec'', ''nbi'', ''rad'' ', ... - 'rtc: defined, all, adcs'); + 'rtc: defined, all, adcs', ... + 'icds: ''ec'', ''nbi'' '); +help_struct_all.source_ec = sprintf('%s\n','toray (for toray nodes), no other source for eccd yet implemented'); +help_struct_all.source_nbi = sprintf('%s\n','nbi_output_matfilename containing out structure, to be added astra nodes'); help_struct_all.camera = ['sxr: for MPX: ''central'', ''top'' (default), ''bottom'' or ''both'' ; ' ... ' for XTOMO: ''central'' (a central chord only), defaults if empty, [1 3 5] if only camera 1, 3 and 5 are desired']; help_struct_all.freq = '''slow'', default, lower sampling; ''fast'' full samples for both mpx and xtomo'; diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m index 51505bb27c3ffb4960d285484037bcbb96cb111e..da7cecd65acfd5995aa74eb2993d7a7bc987dc3a 100644 --- a/crpptbx/TCV/tcv_requests_mapping.m +++ b/crpptbx/TCV/tcv_requests_mapping.m @@ -131,6 +131,10 @@ switch lower(data_request) mapping.label = 'Halpha'; mapping.method = 'switchcase'; mapping.expression = ''; + case 'icds' + mapping.timedim = 1; + mapping.label = 'various driven current'; + mapping.method = 'switchcase'; case 'ioh' mapping.timedim = 1; mapping.label = 'I ohmic transformer';