From 00da861e585d11c4acdd6fd79e4baa8043ffea82 Mon Sep 17 00:00:00 2001 From: Luke Simons <luke.simons@epfl.ch> Date: Wed, 25 Sep 2024 11:39:00 +0200 Subject: [PATCH] Added first draft of tcv_get_ids_bolometer.m. --- matlab/TCV_IMAS/tcv_get_ids_bolometer.m | 123 ++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 matlab/TCV_IMAS/tcv_get_ids_bolometer.m diff --git a/matlab/TCV_IMAS/tcv_get_ids_bolometer.m b/matlab/TCV_IMAS/tcv_get_ids_bolometer.m new file mode 100644 index 00000000..fe32da03 --- /dev/null +++ b/matlab/TCV_IMAS/tcv_get_ids_bolometer.m @@ -0,0 +1,123 @@ +function [ids_bolometer,ids_bolometer_description] = ... + tcv_get_ids_bolometer(shot, ids_bolometer_empty, gdat_params,varargin) +% +% [ids_bolometer,ids_bolometer_description] = ... +% tcv_get_ids_bolometer(shot, ids_bolometer_empty,varargin); +% +% Get the bolometer diagnostics data +% +% ids_bolometer_empty should at least be the empty bolometer ids structure +% in input +% +% gdat_params: gdat_data.gdat_params to get all params passed from original +% call, in particular error_bar options +% +% Date: 20/09/24 +% Author: L. Simons + +% Initialise structure with default ids_properties +% shot=70777; gdat_params=[]; varargin={}; +% ids_bolometer_empty=ids_empty_bolometer; +[ids_bolometer, ~] = tcv_ids_headpart(shot, ids_bolometer_empty, ... + 'bolometer','homogeneous_time',1,'gdat_params',gdat_params, ... + varargin{:}); +ids_bolometer_description = struct(); + +% Load the bolometer geometry +bolo_geom=bolou_load_geometry(); + + +params_eff.data_request='\tcv_shot::top.results.bolo_u.intensity'; +params_eff.trialindx=1; +params_eff.machine='tcv'; +params_eff.doplot=0; +bolo_u_intensity = gdat(shot,params_eff); +params_eff.data_request='\tcv_shot::top.results.bolo_u.prad'; +bolo_u_prad = gdat(shot,params_eff); +params_eff.data_request='\tcv_shot::top.results.bolo_u.prad_core'; +bolo_u_prad_core = gdat(shot,params_eff); +params_eff.data_request='\tcv_shot::top.results.bolo_u.confidence'; +bolo_u_confidence = gdat(shot,params_eff); + +status = ~ischar(bolo_u_intensity.data) & ~ischar(bolo_u_prad_core.data); + +if status + nchannel = numel(bolo_u_intensity.x); + ids_bolometer.channel(1:nchannel) = ids_bolometer.channel(1); + for ii = 1:nchannel + ids_bolometer.channel(ii) = bolo_geom.channel(ii); + ids_bolometer_description.channel{ii}.name = ... + ['RADCAM bolometer detector name, from camera labels and number ' ... + 'VT: Vertical Top, UL: Upper Lateral, ML: Middle Lateral, ' ... + 'DIV: Divertor, VB: Vertical bottom. Matches cabling.']; + ids_bolometer_description.channel{ii}.identifier = ... + ['RADCAM bolometer system, global index from order in ' ... + '\results::bolo_u tree']; + ids_bolometer.channel{ii}.power.data = bolo_u_intensity.data(ii,:); + ids_bolometer_description.channel{ii}.power.data = ... + ['From results.bolo_u.intensity data, Radiance measured by ' ... + 'Each bolometer foil in units of [W/m^{2}sr]']; + ids_bolometer.channel{ii}.power.t = bolo_u_intensity.t; + ids_bolometer_description.channel{ii}.power.data = ... + ['From results.bolo_u.intensity dim{1}, time basis of radiance']; + ids_bolometer.channel{ii}.validity = 0; % FIXME: Always valid data + ids_bolometer.channel{ii}.power_radiated_total = bolo_u_prad.data; + ids_bolometer_description.channel{ii}.power_radiated_total = ... + ['From results.bolo_u.prad data, Total radiated power measured by ' ... + 'the bolometer system in units of [kW]']; +% ids_bolometer.channel{ii}.power_radiated_total_error_upper = ... +% 0.*bolo_u_prad.data; % FIXME: Zero error +% ids_bolometer.channel{ii}.power_radiated_total_error_lower = ... +% 0.*bolo_u_prad.data; % FIXME: Zero error + ids_bolometer.channel{ii}.power_radiated_inside_lcfs = ... + bolo_u_prad_core.data; + ids_bolometer_description.channel{ii}.power_radiated_inside_lcfs.data = ... + ['From results.bolo_u.prad_core data, Total radiated power ' ... + 'radiated from inside the last closed flux surface measured by ' ... + 'the bolometer system and liuqe reconstruction in units of [kW]']; +% ids_bolometer.channel{ii}.power_radiated_inside_lcfs_error_upper = ... +% 0.*bolo_u_prad_core.data; +% ids_bolometer.channel{ii}.power_radiated_inside_lcfs_error_lower = ... +% 0.*bolo_u_prad_core.data; + ids_bolometer.channel{ii}.power_radiated_validity = 0*bolo_u_prad.data; + + end + ids_bolometer.code.name = 'rc_gti_prep'; + ids_bolometer.code.description = ... + ['rc_gti_prep, RADCAM gitlab repo, calls General Tomographic ' ... + 'Inversion (GTI) commands to generate tomographic inversions ' ... + 'of the emissivity profile and uses liuqe magnetic equilibrium ' ... + 'reconstruction to determine radiated power in the core. ' ... + '/usr/local/bin/matlab960 -nojvm -nosplash -nodisplay -r ' ... + '"anasrvmat(''rc_gti_prep'',$2,[0 2.2],''bolo'', 10, 1, 0.04, 30,' ... + 'false, false,false, [], ''automated'', 1)"']; + ids_bolometer.code.commit=''; + ids_bolometer.code.version=''; + ids_bolometer.code.repository= ... + 'https://gitlab.epfl.ch/spc/tcv/diag/radcam/'; + ids_bolometer.code.parameters=''; + ids_bolometer.code.library{1}.name = 'meq'; + ids_bolometer.code.library{1}.description = 'Magnetic equilibrium'; + ids_bolometer.code.library{1}.commit = ''; + ids_bolometer.code.library{1}.version = ''; + ids_bolometer.code.library{1}.repository = ... + 'https://gitlab.epfl.ch/spc/tcv/tbx/meq'; + ids_bolometer.code.library{1}.parameters = ''; + ids_bolometer.code.library{2}.name = 'GTI'; + ids_bolometer.code.library{2}.description = ... + 'General Tomographic Inversion'; + ids_bolometer.code.library{2}.commit = ''; + ids_bolometer.code.library{2}.version = ''; + ids_bolometer.code.library{2}.repository = ... + 'https://gitlab.epfl.ch/spc/tcv/analysis/gti'; + ids_bolometer.code.library{2}.parameters = ''; + + + % FIXME: Values of bolo_u_confidence don't match output_flag + ids_bolometer.code.output_flag=bolo_u_confidence; + ids_bolometer.time = bolo_u_intensity.t; +else + warning('Failed to load data for shot %d',shot); +end + +end -- GitLab