function [ids_ec_antennas,ids_ec_antennas_description,varargout] = tcv_get_ids_ec_antennas(shot,ids_ec_antennas_empty, gdat_params,varargin); % % [ids_ec_antennas,ids_ec_antennas_description,varargout] = tcv_get_ids_ec_antennas(shot,ids_ec_antennas_empty,varargin); % % % gdat_params: gdat_data.gdat_params to get all params passed from original call, in particular error_bar options % [ids_ec_antennas, params_ec_antennas] = tcv_ids_headpart(shot,ids_ec_antennas_empty,'ec_antennas','homogeneous_time',0,varargin{:}); % As a general rule, for a new substructure under the main ids, construct a local structure like: % "global_quantities" with subfields being the relevant data to get and a local structure: % "global_quantities_desc" which contains the same subfields themselves containing the gdat string aftre shot used % pow=gdat_tcv(shot,'powers'); if shot>=63000 warning('not sure if set-up correct for new launchers, beams, gyrotrons. Check with O. Sauter') return end nb_antennas = 9; % at this stage keep same numbering as standard TCV launchers before mid-2019 ids_ec_antennas.antenna(1:nb_antennas) = ids_ec_antennas.antenna(1); % copy empty structure for all units, then fill in % $$$ ids_ec_antennas.time = pow.ec.t; if homogeneous time % $$$ ids_ec_antennas_description.time = 'time from power'; [r_phi0,z_phi0,r1,z1,rc,zc,thetphi_L,thetphi_tor,raysbylauncher,powers,fname,z_axis,launch_params] = ... toray_raygeom_TCV(shot,pow.ec.t(1:10:end)); for iant=1:nb_antennas ids_ec_antennas.antenna{iant}.identifier = ['L' num2str(iant)]; switch iant case {1,4} ids_ec_antennas.antenna{iant}.name = 'LFS equatorial launcher'; case {2, 3, 5, 6} ids_ec_antennas.antenna{iant}.name = 'LFS top launcher'; otherwise ids_ec_antennas.antenna{iant}.name = 'TOP launcher'; end if any(isfinite(pow.ec.data(:,iant))) ids_ec_antennas.antenna{iant}.power_launched.data = pow.ec.data(:,iant); ids_ec_antennas.antenna{iant}.power_launched.time = pow.ec.t; ids_ec_antennas_description.antenna{iant}.power_launched = 'from gdat powers .ec'; ids_ec_antennas_description.antenna{iant}.launching_position = 'from launch_params obtained from toray_raygeom_TCV'; else ids_ec_antennas_description.antenna{iant}.power_launched = 'no power for this launcher from gdat powers .ec'; end if length(launch_params)>=iant && ~isempty(launch_params{iant}) % find 1st non-empty data it_ok{iant} = []; for it=1:length(launch_params{iant}) if ~isempty(launch_params{iant}{it}) it_ok{iant}(end+1) = it; end end % non time-dependent quantities, take 1st ok values ids_ec_antennas.antenna{iant}.frequency =launch_params{iant}{it_ok{iant}(1)}.freq; ids_ec_antennas.antenna{iant}.mode.time = [pow.ec.t(1) pow.ec.t(end)]; ids_ec_antennas.antenna{iant}.mode.data = [-1 -1]; % at this stage assume X mode always, to change when available for i=1:length(it_ok{iant}) r0 = sqrt(launch_params{iant}{it_ok{iant}(i)}.x0.^2 + launch_params{iant}{it_ok{iant}(i)}.y0.^2) / 100.; % in [m] time_launch = launch_params{iant}{it_ok{iant}(i)}.time; ids_ec_antennas.antenna{iant}.launching_position.r.data(i) = r0; ids_ec_antennas.antenna{iant}.launching_position.z.data(i) = launch_params{iant}{it_ok{iant}(i)}.z0/100.; ids_ec_antennas.antenna{iant}.launching_position.phi.data(i) = atan2(launch_params{iant}{it_ok{iant}(i)}.y0/100,r0); ids_ec_antennas.antenna{iant}.launching_position.r.time(i) = time_launch; ids_ec_antennas.antenna{iant}.launching_position.z.time(i) = time_launch; ids_ec_antennas.antenna{iant}.launching_position.phi.time(i) = time_launch; ids_ec_antennas.antenna{iant}.launching_angle_pol.data(i) = launch_params{iant}{it_ok{iant}(i)}.theta_toray * pi/180.; ids_ec_antennas.antenna{iant}.launching_angle_pol.time(i) = time_launch; ids_ec_antennas.antenna{iant}.launching_angle_tor.data(i) = launch_params{iant}{it_ok{iant}(i)}.phi_toray * pi/180.; ids_ec_antennas.antenna{iant}.launching_angle_tor.time(i) = time_launch; ids_ec_antennas.antenna{iant}.beam.spot.size.data(i,1:2) = 0.05; ids_ec_antennas.antenna{iant}.beam.spot.size.time(i) = time_launch; ids_ec_antennas.antenna{iant}.beam.spot.angle.data(i,1:2) = 0.0; ids_ec_antennas.antenna{iant}.beam.spot.angle.time(i) = time_launch; ids_ec_antennas.antenna{iant}.beam.phase.angle.data(i,1:2) = 0.0; ids_ec_antennas.antenna{iant}.beam.phase.angle.time(i) = time_launch; ids_ec_antennas.antenna{iant}.beam.phase.curvature.data(i,1:2) = 1.0; ids_ec_antennas.antenna{iant}.beam.phase.curvature.time(i) = time_launch; end end end % cocos automatic transform if exist('ids_generic_cocos_nodes_transformation_symbolic') == 2 [ids_ec_antennas,cocoscoeff]=ids_generic_cocos_nodes_transformation_symbolic(ids_ec_antennas,'ec_antennas',gdat_params.cocos_in, ... gdat_params.cocos_out,gdat_params.ipsign_out,gdat_params.b0sign_out,gdat_params.ipsign_in,gdat_params.b0sign_in); end