ft24_pacejka_tyre/scripts/reorganize_data.m

74 lines
2.6 KiB
Matlab

function reorganize_data()
basePath = '../';
rawDataPath = fullfile(basePath, 'raw_data');
% Get all .mat files in the rawDataPath
files = dir(fullfile(rawDataPath, '**/*.mat'));
for i = 1:length(files)
filePath = fullfile(files(i).folder, files(i).name);
data = load(filePath);
if isfield(data, 'tireid') && isfield(data, 'testid')
tireid = data.tireid;
testType = formatTestType(data.testid);
newDir = fullfile('../sorted_data', tireid);
if ~exist(newDir, 'dir')
mkdir(newDir);
end
newFilePath = fullfile(newDir, sprintf('%s.mat', testType));
if exist(newFilePath, 'file')
mergeData(newFilePath, filePath);
else
copyfile(filePath, newFilePath);
end
else
warning('Required fields not found in %s', filePath);
end
end
end
function testType = formatTestType(testid)
switch lower(testid)
case 'cornering'
testType = 'cornering';
case 'drive/brake/combined'
testType = 'drivebrake';
otherwise
error('Unknown testid: %s', testid);
end
end
function mergeData(mergedFilePath, newFilePath)
% Load existing and new data
existingData = load(mergedFilePath);
newData = load(newFilePath);
% Merge logic with error checking for singular values
fieldNames = fieldnames(newData);
for i = 1:length(fieldNames)
fieldName = fieldNames{i};
if isnumeric(newData.(fieldName)) || islogical(newData.(fieldName))
if numel(newData.(fieldName)) == 1 % Singular value
if isfield(existingData, fieldName) && existingData.(fieldName) ~= newData.(fieldName)
error('Mismatch in singular value for field "%s" between existing and new data.', fieldName);
end
elseif isfield(existingData, fieldName)
existingData.(fieldName) = [existingData.(fieldName); newData.(fieldName)];
else
existingData.(fieldName) = newData.(fieldName);
end
elseif ~strcmp(fieldName, 'tireid') && ~strcmp(fieldName, 'testid')
if isfield(existingData, fieldName) && ~isequal(existingData.(fieldName), newData.(fieldName))
error('Mismatch in non-array field "%s" between existing and new data.', fieldName);
end
existingData.(fieldName) = newData.(fieldName);
end
end
% Save the merged data
save(mergedFilePath, '-struct', 'existingData');
end