Added structure and reorg script and first model
This commit is contained in:
73
scripts/reorganize_data.m
Normal file
73
scripts/reorganize_data.m
Normal file
@ -0,0 +1,73 @@
|
||||
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
|
||||
Reference in New Issue
Block a user