% Script, that shows the data management routine :-) loadExistingWareHouse = 0; if loadExistingWareHouse [file, path] = uigetfile(); wh = load([path filesep file]); wh = wh.wh; wh.showInfo; else % 1) Define all your parameters, best practice directly constructs a % structure params = struct; params.l = [2,10]; params.dispersion = [0]; params.sgm = [0]; % params.pol = ["YXYXYXYX","YXXYYXXY","YYYYYYYY"]; params.pol = ["alternated","paired","copolarized"]; params.p_in = [3]; params.p_out = [-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2]; params.pmd = [0.1]; params.gamma = [0.0023]; params.realization = [1:20]; params.numchannels = [16]; params.center_wavelength = floor([getSweepWavelengths(35, 50e9, 1310)] .* 1000) ./ 1000 ; params.center_wavelength = [1285 1287 1290 1292 1295]; params.center_wavelength = 1310; params.channelspacing = [400e9]; params.random_zdw = [0]; %wh = warehouse :-) wh = DataStorage(params); wh.showInfo; wh.addStorage("ber"); wh.addStorage("totalBer"); end %2) Simulate a bunch of data - TO BE IMPLEMENTED HERE - for now use scripts %from Sebastian %3) Once the simulation folder is around, specifiy path and analyze dirs path = uigetdir('C:\Users\Silas\Documents\MATLAB\Raw_Cluster_Simulations'); allMat = getAllFilesInFolder(path,'.mat'); allErr = getAllFilesInFolder(path,'.err'); %allMat = dir([path filesep '*.mat']); %allErr = dir([path filesep '*.err']); if numel(allMat) == 0 warning('You defined an empty folder. Could not locate any .mat file.') else fprintf('%-20s', 'Err Files:'); fprintf('%-12s', num2str(numel(allErr))); fprintf('\n'); fprintf('%-20s', 'Mat Files:'); fprintf('%-12s', num2str(numel(allMat))); fprintf('\n'); fprintf('%-20s', 'Missing Mat Files:'); fprintf('%-12s', num2str(numel(allErr)-numel(allMat))); fprintf('\n'); end %4) Now load that data f = waitbar(0,'Please wait...'); cnt = 0; for num = 1:numel(allMat) fileName = allMat(num).name; fileFolder = allMat(num).path; fileExt = allMat(num).ext; % matFile = load([fileFolder filesep fileName fileExt]); matFile = matFile.loop_data; % ____________________________________ % FIND THE DATAPOINT CURRENTLY LOADED zdw = 1310; channelplan = "symmetric"; channelspacing = str2double(strrep(regexp(fileName,'(_chsp)+([\d]*)','match'),'_chsp','')).*1e9; numchannels = str2double(strrep(regexp(fileName,'(ch)+(_)+([\d]*)','match'),'ch_','')); center_wavelength = str2double(insertAfter(strrep(regexp(fileName,'(lambda)+([\d]*)','match'),'lambda',''),4,'.')); center_wavelength = floor(center_wavelength * 1000) / 1000; if center_wavelength == 2192 continue end center_wavelength = 1310; random_zdw = str2double(strrep(regexp(fileName,'(rzwd)+([\d])','match'),'rzwd','')); l = str2double(strrep(regexp(fileName,'([L])+(_)+([\d]*)','match'),'L_','')); d = str2double(strrep(regexp(fileName,'([D])+(_)+([\d]*)','match'),'D_','')); if d == 0 sgm = false; else sgm = true; end if numel(regexp(fileName,'(YYYY)','match')) > 1 pol = "copolarized"; elseif numel(regexp(fileName,'(YXXY)','match')) > 1 pol = "paired"; elseif numel(regexp(fileName,'(YXYX)','match')) > 1 pol = "alternated"; else pol = "copolarized"; end p_in = str2double(strrep(regexp(fileName,'(pow_)+([-,\d]{1})','match'),'pow_','')); pmd = 0.1; gamma = 0.0023; realiz = str2double(strrep(regexp(fileName,'(r)+([-,\d]{1,3})','match'),'r','')); % ____________________________________ % Get the information you want from current file rop=[]; ber = []; for pow = 2:12 module_number = ''; for p = 1:11 %11 because there are 11 ROP branches in model % get ROP if p == 1 p_out = matFile.dp_optatten_para.atten; else p_out = matFile.("dp_optatten__"+(p)+"_para").atten; end p_out = round(p_out-10*log10(numel(matFile.config.parameters.common.wavelengthPlan))); for c = 1:numel(matFile.config.parameters.common.wavelengthPlan) ber(c) = matFile.("prms_compare_wdm__"+(p+1)+"_out"){1,c}.ber; end totalBer = matFile.("prms_compare_wdm__"+(p+1)+"_out"){1,end}.totalBer; if totalBer > 0.2 && channelspacing == 400e9 && pol == "alternated" disp("stopping here"); pause; end % ____________________________________ % Add value to warehouse at the correct position wh.addValueToStorage(ber,'ber',l,d,sgm,pol,p_in,p_out,pmd,gamma,realiz,numchannels, center_wavelength,channelspacing,random_zdw); wh.getStoValue('ber',l,d,sgm,pol,p_in,p_out,pmd,gamma,realiz,numchannels, center_wavelength,channelspacing,random_zdw); wh.addValueToStorage(totalBer,'totalBer',l,d,sgm,pol,p_in,p_out,pmd,gamma,realiz,numchannels,center_wavelength,channelspacing,random_zdw); end end waitbar(num/numel(allMat),f,'Loading your data'); end close(f) % 4) Hey! the warehouse is here and (hopefully) filled with data :-) % Create a save dialog defaultDir = 'C:\Users\Silas\Documents\MATLAB\Raw_Cluster_Simulations\'; defaultExt = '*.mat'; [filename, pathname] = uiputfile(fullfile(defaultDir, defaultExt),'', 'wh.mat'); % Check if the user pressed Cancel if isequal(filename, 0) || isequal(pathname, 0) disp('Save operation canceled.'); else % Save the variable to the selected file save(fullfile(pathname, filename), 'wh'); disp(['Variable "wh" saved to: ', fullfile(pathname, filename)]); end function matFileStructArray = getAllFilesInFolder(folderPath,extension) % Get a list of all files in the current folder currentFolderFiles = dir(fullfile(folderPath, '*')); % Exclude '.' and '..' directories currentFolderFiles = currentFolderFiles(~ismember({currentFolderFiles.name}, {'.', '..'})); % Initialize the structure array for .mat files matFileStructArray = struct('path', {}, 'name', {}, 'ext', {}); % Loop over each file in the current folder for i = 1:length(currentFolderFiles) currentFile = currentFolderFiles(i); % Check if the current item is a file and has a .mat extension if ~currentFile.isdir && endsWith(currentFile.name, extension, 'IgnoreCase', true) % If it's a .mat file, add it to the structure array [matFileStructArray(end + 1).path,matFileStructArray(end+1).name, matFileStructArray(end+1).ext] = fileparts(fullfile(folderPath, currentFile.name)); elseif currentFile.isdir % If it's a directory, recursively call the function subfolderPath = fullfile(folderPath, currentFile.name); subfolderMatFiles = getAllFilesInFolder(subfolderPath,extension); % Add .mat files from the subfolder to the structure array matFileStructArray = [matFileStructArray, subfolderMatFiles]; end end end