Files
2025-04-25 10:31:43 +02:00

63 lines
2.3 KiB
Matlab

% 1) Find RUN ID's
basePath = 'C:\Users\Silas\Documents\MATLAB\Datensätze\sioe_labor\';
% database = DBHandler("pathToDB",[basePath,'silas_labor.db']);
database = DBHandler("type",'mysql');
filterParams = database.tables;
filterParams.Configurations = struct( ...
'bitrate', 112e9, ... %[224,336,360,390,420,448]
'db_mode', [], ...
'fiber_length', [], ...
'interference_attenuation',[], ...
'interference_path_length',300, ...
'is_mpi', 1, ...
'pam_level', 4 ...
);
selectedFields = {'Runs.run_id',...
'Configurations.db_mode','Configurations.pam_level','Configurations.bitrate','Configurations.symbolrate','Configurations.fiber_length','Configurations.wavelength',...
'Configurations.precomp_amp','Measurements.power_rop','Measurements.power_pd_in','Configurations.v_bias','Configurations.is_mpi',...
'Configurations.interference_attenuation','Configurations.rop_attenuation'};
[dataTable,sql_query] = database.queryDB(filterParams, selectedFields);
% only the rows without BER so far
% dataTable = dataTable(dataTable.BER == 0,:);
dataTable = dataTable((dataTable.fiber_length ~= 1),:);
% Ensure a parallel pool is running
pool = gcp('nocreate');
if isempty(pool)
pool = parpool;
% stop all forgotten or unfetched jobs from queue
elseif ~isempty(pool.FevalQueue.QueuedFutures) || ~isempty(pool.FevalQueue.RunningFutures)
oldq = length(pool.FevalQueue.QueuedFutures) + length(pool.FevalQueue.RunningFutures);
pool.FevalQueue.cancelAll
fprintf('Canceled %d unfetched jobs from old queue.', oldq);
end
% Number of tasks to submit (one per run_id)
nTasks = height(dataTable);
futures = parallel.FevalFuture.empty();
% Submit each DSP run as a parallel task using parfeval
for i = 1:nTasks
% Extract the run_id (other parameters could be passed if needed)
runID = dataTable.run_id(i);
% Submit the function call to dsp_run_id (assuming it returns no output, hence 0 outputs)
futures(i) = parfeval(pool, @dsp_run_id, 0, runID, "max_occurences", 15, "append_to_db", 1);
end
% Set up a waitbar to monitor progress
h = waitbar(0, 'Processing DSP runs...');
while ~all(strcmp({futures.State}, 'finished'))
finishedCount = sum(strcmp({futures.State}, 'finished'));
waitbar(finishedCount / nTasks, h);
pause(0.1);
end
delete(h);
fprintf('All DSP runs processed.\n');