74 lines
2.6 KiB
Matlab
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
|