63 lines
2.3 KiB
Matlab
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');
|