From a9e31134c78229a259e119bd74e6f893f9f92c6d Mon Sep 17 00:00:00 2001
From: Aliki Chatzilouka <chatzilouka.aliki@epfl.ch>
Date: Tue, 26 Mar 2024 13:38:02 +0100
Subject: [PATCH] only filling in source structures for active launchers

---
 matlab/TCV_IMAS/tcv_get_ids_core_sources.m | 119 ++++++++++++---------
 1 file changed, 67 insertions(+), 52 deletions(-)

diff --git a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
index ebc536bc..c0289a71 100644
--- a/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
+++ b/matlab/TCV_IMAS/tcv_get_ids_core_sources.m
@@ -92,11 +92,19 @@ ec_gdat = gdat(shot,'ec_data'); ec_data = ec_gdat.ec.ec_data;
 ec_time = ec_data.p_dens.t;
 n_ec_time = numel(ec_time);
 ec_t_grid = powers_gdat.ec.t; ec_n_t = numel(ec_t_grid);
+[status,time,pgyro,pgyro_ecrh,gyro2launcher,freq2launcher] = write_pgyro(shot);
 
 nb_launchers = size(ec_gdat.ec.ec_data.rho_max_pow_dens.data,1);
-id_ec.description = 'Sources from electron cyclotron heating and current drive';
+active_launchers = [];
+for i_lau = 1:numel(gyro2launcher)
+    if gyro2launcher(i_lau) ~= 0
+        active_launchers(end+1) = i_lau;
+    end
+n_active_launchers = numel(active_launchers);
+end
+id_ec.description = 'L1/G1 Sources from electron cyclotron heating and current drive';
 id_ec.index = 3; id_ec.name = 'ec';
-for i_lau = 1:nb_launchers
+for i_lau = active_launchers
     ids_core_sources.source{last_index+i_lau} = source_template;
     ids_core_sources.source{last_index+i_lau}.identifier = id_ec;
     ids_core_sources.source{last_index+i_lau}.profiles_1d(1:ec_n_t) = {profiles_template};
@@ -108,7 +116,7 @@ ec_total_pow(isnan(ec_total_pow)) = 0;
 ec_total_cur = ec_data.cd_tot.data(nb_launchers+1,:);
 ec_total_cur(isnan(ec_total_cur)) = 0;
 
-for i_lau = 1:nb_launchers
+for i_lau = active_launchers
     for ii = 1:ec_n_t
         ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.time = ec_t_grid(ii); % profiles time 
         ids_core_sources.source{last_index+i_lau}.global_quantities{ii}.time = ec_t_grid(ii); % globals time
@@ -132,20 +140,20 @@ it = iround_os(ec_t_grid,ec_time);
 sparse_p_ec_injected = p_ec_injected(it,:); % injected ec power vals corresponding to ec_time grid
 rho_grid = size(p_dens, 1);
 % calculate normalised profiles on ec_time grid
-norm_p_dens = zeros(rho_grid, nb_launchers+1, n_ec_time);
-norm_p_integrated = zeros(rho_grid, nb_launchers+1, n_ec_time);
-norm_cd_dens = zeros(rho_grid, nb_launchers+1, n_ec_time);
-norm_cd_integrated = zeros(rho_grid, nb_launchers+1, n_ec_time);
+norm_p_dens = zeros(rho_grid, n_active_launchers, n_ec_time);
+norm_p_integrated = zeros(rho_grid, n_active_launchers, n_ec_time);
+norm_cd_dens = zeros(rho_grid, n_active_launchers, n_ec_time);
+norm_cd_integrated = zeros(rho_grid, n_active_launchers, n_ec_time);
 for t = 1:n_ec_time
-    norm_p_dens_temp = zeros(rho_grid, nb_launchers+1);
-    norm_p_integrated_temp = zeros(rho_grid, nb_launchers+1);
-    norm_cd_dens_temp = zeros(rho_grid, nb_launchers+1);
-    norm_cd_integrated_temp = zeros(rho_grid, nb_launchers+1);
-    for launcher = 1:nb_launchers+1
-        norm_p_dens_temp(:, launcher) = p_dens(:, launcher, t) ./ sparse_p_ec_injected(t, launcher);
-        norm_p_integrated_temp(:, launcher) = p_integrated(:, launcher, t) ./ sparse_p_ec_injected(t, launcher);
-        norm_cd_dens_temp(:, launcher) = cd_dens(:, launcher, t) ./ sparse_p_ec_injected(t, launcher);
-        norm_cd_integrated_temp(:, launcher) = cd_integrated(:, launcher, t) ./ sparse_p_ec_injected(t, launcher);
+    norm_p_dens_temp = zeros(rho_grid, n_active_launchers);
+    norm_p_integrated_temp = zeros(rho_grid, n_active_launchers);
+    norm_cd_dens_temp = zeros(rho_grid, n_active_launchers);
+    norm_cd_integrated_temp = zeros(rho_grid, n_active_launchers);
+    for i_lau = n_active_launchers
+        norm_p_dens_temp(:, i_lau) = p_dens(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, active_launchers(i_lau));
+        norm_p_integrated_temp(:, i_lau) = p_integrated(:, active_launchers(i_lau)) ./ sparse_p_ec_injected(t, active_launchers(i_lau));
+        norm_cd_dens_temp(:, i_lau) = cd_dens(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, i_lau);
+        norm_cd_integrated_temp(:, i_lau) = cd_integrated(:, active_launchers(i_lau), t) ./ sparse_p_ec_injected(t, active_launchers(i_lau));
     end
     norm_p_dens(:,:,t) = norm_p_dens_temp;
     norm_p_integrated(:,:,t) = norm_p_integrated_temp;
@@ -154,42 +162,42 @@ for t = 1:n_ec_time
 end
 
 % interpolate normalised p_dens profiles on ec_t_grid 
-interp_norm_p_dens = zeros(rho_grid, nb_launchers+1, ec_n_t);
-interp_norm_p_integrated = zeros(rho_grid, nb_launchers+1, ec_n_t);
-interp_norm_cd_dens = zeros(rho_grid, nb_launchers+1, ec_n_t);
-interp_norm_cd_integrated = zeros(rho_grid, nb_launchers+1, ec_n_t);
+interp_norm_p_dens = zeros(rho_grid, n_active_launchers, ec_n_t);
+interp_norm_p_integrated = zeros(rho_grid, n_active_launchers, ec_n_t);
+interp_norm_cd_dens = zeros(rho_grid, n_active_launchers, ec_n_t);
+interp_norm_cd_integrated = zeros(rho_grid, n_active_launchers, ec_n_t);
 for rho = 1:rho_grid
-    for launcher = 1:nb_launchers+1
-        profile_p_dens = squeeze(norm_p_dens(rho, launcher, :));
-        profile_p_integrated = squeeze(norm_p_integrated(rho, launcher, :));
-        profile_cd_dens = squeeze(norm_cd_dens(rho, launcher, :));
-        profile_cd_integrated = squeeze(norm_cd_integrated(rho, launcher, :));
+    for i_lau = 1:n_active_launchers
+        profile_p_dens = squeeze(norm_p_dens(rho, i_lau, :));
+        profile_p_integrated = squeeze(norm_p_integrated(rho, i_lau, :));
+        profile_cd_dens = squeeze(norm_cd_dens(rho, i_lau, :));
+        profile_cd_integrated = squeeze(norm_cd_integrated(rho, i_lau, :));
         interp_profile_p_dens = interp1(ec_time, profile_p_dens, ec_t_grid);
         interp_profile_p_integrated = interp1(ec_time, profile_p_integrated, ec_t_grid);
         interp_profile_cd_dens = interp1(ec_time, profile_cd_dens, ec_t_grid);
         interp_profile_cd_integrated = interp1(ec_time, profile_cd_integrated, ec_t_grid);
-        interp_norm_p_dens(rho, launcher, :) = interp_profile_p_dens;
-        interp_norm_p_integrated(rho, launcher, :) = interp_profile_p_integrated;
-        interp_norm_cd_dens(rho, launcher, :) = interp_profile_cd_dens;
-        interp_norm_cd_integrated(rho, launcher, :) = interp_profile_cd_integrated;
+        interp_norm_p_dens(rho, i_lau, :) = interp_profile_p_dens;
+        interp_norm_p_integrated(rho, i_lau, :) = interp_profile_p_integrated;
+        interp_norm_cd_dens(rho, i_lau, :) = interp_profile_cd_dens;
+        interp_norm_cd_integrated(rho, i_lau, :) = interp_profile_cd_integrated;
     end
 end
 
 % normalised & interpolated profiles * p_ec_injected on ec_t_grid
-interp_p_dens = zeros(rho_grid, nb_launchers+1, ec_n_t);
-interp_p_integrated = zeros(rho_grid, nb_launchers+1, ec_n_t);
-interp_cd_dens = zeros(rho_grid, nb_launchers+1, ec_n_t);
-interp_cd_integrated = zeros(rho_grid, nb_launchers+1, ec_n_t);
+interp_p_dens = zeros(rho_grid, n_active_launchers, ec_n_t);
+interp_p_integrated = zeros(rho_grid, n_active_launchers, ec_n_t);
+interp_cd_dens = zeros(rho_grid, n_active_launchers, ec_n_t);
+interp_cd_integrated = zeros(rho_grid, n_active_launchers, ec_n_t);
 for t = 1:numel(ec_t_grid)
-    unnormalised_p_dens = zeros(rho_grid, nb_launchers+1);
-    unnormalised_p_integrated = zeros(rho_grid, nb_launchers+1);
-    unnormalised_cd_dens = zeros(rho_grid, nb_launchers+1);
-    unnormalised_cd_integrated = zeros(rho_grid, nb_launchers+1);
-    for launcher = 1:nb_launchers+1
-        unnormalised_p_dens(:,launcher) = interp_norm_p_dens(:,launcher,t).* p_ec_injected(t, launcher);
-        unnormalised_p_integrated(:,launcher) = interp_norm_p_integrated(:,launcher,t).* p_ec_injected(t, launcher);
-        unnormalised_cd_dens(:,launcher) = interp_norm_cd_dens(:,launcher,t).* p_ec_injected(t, launcher);
-        unnormalised_cd_integrated(:,launcher) = interp_norm_cd_integrated(:,launcher,t).* p_ec_injected(t, launcher);
+    unnormalised_p_dens = zeros(rho_grid, n_active_launchers);
+    unnormalised_p_integrated = zeros(rho_grid, n_active_launchers);
+    unnormalised_cd_dens = zeros(rho_grid, n_active_launchers);
+    unnormalised_cd_integrated = zeros(rho_grid, n_active_launchers);
+    for i_lau = 1:n_active_launchers
+        unnormalised_p_dens(:,i_lau) = interp_norm_p_dens(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau));
+        unnormalised_p_integrated(:,i_lau) = interp_norm_p_integrated(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau));
+        unnormalised_cd_dens(:,i_lau) = interp_norm_cd_dens(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau));
+        unnormalised_cd_integrated(:,i_lau) = interp_norm_cd_integrated(:,i_lau,t).* p_ec_injected(t, active_launchers(i_lau));
     end
     interp_p_dens(:,:,t) = unnormalised_p_dens;
     interp_p_integrated(:,:,t) = unnormalised_p_integrated;
@@ -198,22 +206,29 @@ for t = 1:numel(ec_t_grid)
 end
 
 for ii = 1:ec_n_t
-    for i = 1:nb_launchers
-        ids_core_sources.source{last_index+i}.profiles_1d{ii}.grid.rho_tor_norm = ...
+    for i_lau = active_launchers
+        launcher_index = find(active_launchers == i_lau);
+        ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.grid.rho_tor_norm = ...
           ec_data.p_dens.rhotor_norm(1,:);
-        ids_core_sources.source{last_index+i}.profiles_1d{ii}.electrons.energy = ...
-          interp_p_dens(:,i,ii);
-        ids_core_sources.source{last_index+i}.profiles_1d{ii}.electrons.power_inside = ...
-          interp_p_integrated(:,i,ii);
+        ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.electrons.energy = ...
+          interp_p_dens(:,launcher_index,ii);
+        ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.electrons.power_inside = ...
+          interp_p_integrated(:,launcher_index,ii);
       % current density (to adapt to <J.B>/B0)
-        ids_core_sources.source{last_index+i}.profiles_1d{ii}.j_parallel = ...
-          interp_cd_dens(:,i,ii);
+        ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.j_parallel = ...
+          interp_cd_dens(:,launcher_index,ii);
         % integrated current density (to adapt to INTEGRAL(<J.B>/B0)*ds_phi)
-        ids_core_sources.source{last_index+i}.profiles_1d{ii}.current_parallel_inside = ...
-          interp_cd_integrated(:,i,ii); 
+        ids_core_sources.source{last_index+i_lau}.profiles_1d{ii}.current_parallel_inside = ...
+          interp_cd_integrated(:,launcher_index,ii); 
       
     end
 end
+
+%add empty sources for rest of unsused launchers
+if numel(ids_core_sources.source)-last_index ~= nb_launchers
+    ids_core_sources.source{last_index+nb_launchers} = [];
+end    
+    
 last_index = last_index+nb_launchers;
 
 %% nbi  
-- 
GitLab