diff --git a/matlab/TCV_IMAS/tcv_get_ids_nbi.m b/matlab/TCV_IMAS/tcv_get_ids_nbi.m index 2f3ed41425a39cc0ce64c9d736f7ccf8480dbc28..27a77052cad8fedbf77fe03b8cd95ea466a2ce7a 100644 --- a/matlab/TCV_IMAS/tcv_get_ids_nbi.m +++ b/matlab/TCV_IMAS/tcv_get_ids_nbi.m @@ -7,29 +7,194 @@ function [ids_nbi,ids_nbi_description,varargout] = tcv_get_ids_nbi(shot,ids_nbi_ % [ids_nbi, params_nbi] = tcv_ids_headpart(shot,ids_nbi_empty,'nbi','homogeneous_time',0,varargin{:}); - +ids_nbi_description=''; % 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'); nb_units = 2; % assume 2 units: 1st NBH and DNBI ids_nbi.unit(1:nb_units) = ids_nbi.unit(1); % copy empty structure for all units, then fill in -for iunit=1:length(nb_units) +for iunit=1:nb_units switch iunit case 1 ids_nbi.unit{iunit}.identifier = 'NBH1'; ids_nbi.unit{iunit}.name = '25keV 1st NBH source'; + %% power + pow=gdat_tcv(shot,'powers'); ids_nbi.unit{iunit}.power_launched.time = pow.nbi.t; ids_nbi.unit{iunit}.power_launched.data = pow.nbi.data; + %% energy + ids_nbi.unit{iunit}.energy.time = pow.nbi.t; + ids_nbi.unit{iunit}.energy.data = pow.nbi.energy; + %% power & current fractions + p_frac=gdat(shot,'\results::nbh:fraction'); + ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)*0.01; + ids_nbi.unit{iunit}.beam_power_fraction.time = p_frac.t; + i_frac = p_frac.data(:,1:3).*[1 2 3]; + i_frac = i_frac.*1./sum(i_frac); + ids_nbi.unit{iunit}.beam_current_fraction.data = i_frac; + ids_nbi.unit{iunit}.beam_current_fraction.time = p_frac.t; + %% species + ids_nbi.unit{iunit}.species.a = 2.; + ids_nbi.unit{iunit}.species.z_n = 1.; + ids_nbi.unit{iunit}.species.label = ['D']; + %% beamlets group, now only one single beamlet + % https://spcwiki.epfl.ch/wiki/NB_Model + ids_nbi.unit{iunit}.beamlets_group{1}.direction = -1; %clockwise + ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius = 736*1e-3; %736mm +% ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_upper: -9.0000e+40 + ids_nbi.unit{iunit}.beamlets_group{1}.angle = 0.; %injection parallel to midplane +% ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_upper: -9.0000e+40 + ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal = 250*1e-3; +% ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_upper: -9.0000e+40 + ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical = 250*1e-3; +% ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_upper: -9.0000e+40 + %% focus struct + focus = struct(); + focus.focal_length_horizontal = 3.76; +% focus.focal_length_horizontal_error_index = -999999999; +% focus.focal_length_horizontal_error_lower = -9.0000e+40; +% focus.focal_length_horizontal_error_upper = -9.0000e+40; + focus.focal_length_vertical = 3.98; +% focus.focal_length_vertical_error_index: -999999999; +% focus.focal_length_vertical_error_lower: -9.0000e+40; +% focus.focal_length_vertical_error_upper: -9.0000e+40; + focus.width_min_horizontal = 21.6*1e-2; +% focus.width_min_horizontal_error_index: -999999999; +% focus.width_min_horizontal_error_lower: -9.0000e+40; +% focus.width_min_horizontal_error_upper: -9.0000e+40; + focus.width_min_vertical = 9.4*1e-2; +% focus.width_min_vertical_error_index: -999999999; +% focus.width_min_vertical_error_lower: -9.0000e+40; +% focus.width_min_vertical_error_upper: -9.0000e+40; + ids_nbi.unit{iunit}.beamlets_group{1}.focus = focus; + %% divergence component struct + div = struct(); + div.particle_fraction = 1.; + div.vertical = 10.3*1e-3; %rad, in deg it is 0.59 + div.horizontal = 24.4*1e-3; %rad, in deg it is 1.4 + ids_nbi.unit{iunit}.beamlets_group{1}.divergence_component{1} = div; + %% tilting + % it is fixed in time. what should we do about it? + + %% position + %dcd_NBH = psitbxdcd(4.5889, 0.0, 211.9535*pi/180, 0.0, -9.2308*pi/180); + pos = struct(); + pos.phi= 211.9535*pi/180.; +% pos.phi_error_index= -999999999; +% pos.phi_error_lower= -9.0000e+40; +% pos.phi_error_upper= -9.0000e+40; + pos.r= 4.5889; +% pos.r_error_index= -999999999; +% pos.r_error_lower= -9.0000e+40; +% pos.r_error_upper= -9.0000e+40; + pos.z= 0.; +% pos.z_error_index= -999999999; +% pos.z_error_lower= -9.0000e+40; +% pos.z_error_upper= -9.0000e+40; + ids_nbi.unit{iunit}.beamlets_group{1}.position = pos; + %% beamlets + % M. Vallar thinks it is useless now + case 2 ids_nbi.unit{iunit}.identifier = 'DNBI'; ids_nbi.unit{iunit}.name = 'diagnostic NBI'; - % ids_nbi.unit{iunit}.power_launched.data = pow.nbi.data; % DNBI power time values and time - % ids_nbi.unit{iunit}.power_launched.time = ; + %% power + pow=gdat_tcv(shot,'\RESULTS::DNBI:POWR_TCV'); + ids_nbi.unit{iunit}.power_launched.time = pow.t; + ids_nbi.unit{iunit}.power_launched.data = pow.data*1e6; + %% energy + en=gdat(shot,'\RESULTS::DNBI:ENERGY'); + ids_nbi.unit{iunit}.energy.data = en.data*1e3; + ids_nbi.unit{iunit}.energy.time = en.t; + %% power & current fractions + p_frac=gdat(shot,'\results::dnbi:fraction'); + ids_nbi.unit{iunit}.beam_power_fraction.data = p_frac.data(:,1:3)*0.01; + ids_nbi.unit{iunit}.beam_power_fraction.time = p_frac.t; + i_frac = p_frac.data(:,1:3).*[1 2 3]; + i_frac = i_frac.*1./sum(i_frac); + ids_nbi.unit{iunit}.beam_current_fraction.data = i_frac(:,:); + ids_nbi.unit{iunit}.beam_current_fraction.time = p_frac.t; + %% species + ids_nbi.unit{iunit}.species.a = 1.; + ids_nbi.unit{iunit}.species.z_n = 1.; + ids_nbi.unit{iunit}.species.label = ['H']; + %% beamlets group, now only one single beamlet + % https://spcwiki.epfl.ch/wiki/NB_Model + ids_nbi.unit{iunit}.beamlets_group{1}.direction = 1; %ctr-clockwise + ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius = 235.3*1e-3; %736mm +% ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.tangency_radius_error_upper: -9.0000e+40 + ids_nbi.unit{iunit}.beamlets_group{1}.angle = 0.; %injection parallel to midplane +% ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.angle_error_upper: -9.0000e+40 + ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal = 87.2*1e-3; +% ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_horizontal_error_upper: -9.0000e+40 + ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical = 87.2*1e-3; +% ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_index: -999999999 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_lower: -9.0000e+40 +% ids_nbi.unit{iunit}.beamlets_group{1}.width_vertical_error_upper: -9.0000e+40 + %% focus struct + focus = struct(); + focus.focal_length_horizontal = 1.8; +% focus.focal_length_horizontal_error_index = -999999999; +% focus.focal_length_horizontal_error_lower = -9.0000e+40; +% focus.focal_length_horizontal_error_upper = -9.0000e+40; + focus.focal_length_vertical = 1.8; +% focus.focal_length_vertical_error_index: -999999999; +% focus.focal_length_vertical_error_lower: -9.0000e+40; +% focus.focal_length_vertical_error_upper: -9.0000e+40; + focus.width_min_horizontal = 12.1*1e-2; +% focus.width_min_horizontal_error_index: -999999999; +% focus.width_min_horizontal_error_lower: -9.0000e+40; +% focus.width_min_horizontal_error_upper: -9.0000e+40; + focus.width_min_vertical = 12.1*1e-2; +% focus.width_min_vertical_error_index: -999999999; +% focus.width_min_vertical_error_lower: -9.0000e+40; +% focus.width_min_vertical_error_upper: -9.0000e+40; + ids_nbi.unit{iunit}.beamlets_group{1}.focus = focus; + %% divergence component struct + div = struct(); + div.particle_fraction = 1.; + div.vertical = 9.2*1e-3; %rad, in deg it is 0.53 + div.horizontal = 9.2*1e-3; %rad, in deg it is 0.53 + ids_nbi.unit{iunit}.beamlets_group{1}.divergence_component{1} = div; + %% tilting + % it is fixed in time. what should we do about it? + + %% position + %dcd_NBH = psitbxdcd(4.5889, 0.0, 211.9535*pi/180, 0.0, -9.2308*pi/180); + pos = struct(); + pos.phi= 295.2416*pi/180.; +% pos.phi_error_index= -999999999; +% pos.phi_error_lower= -9.0000e+40; +% pos.phi_error_upper= -9.0000e+40; + pos.r= 4.9274; +% pos.r_error_index= -999999999; +% pos.r_error_lower= -9.0000e+40; +% pos.r_error_upper= -9.0000e+40; + pos.z= 0.; +% pos.z_error_index= -999999999; +% pos.z_error_lower= -9.0000e+40; +% pos.z_error_upper= -9.0000e+40; + ids_nbi.unit{iunit}.beamlets_group{1}.position = pos; + %% beamlets + % M. Vallar thinks it is useless now otherwise warning(['iunit = ' num2str(iunit) ' not yet defined']); end