https://github.com/dianadima/mot_action
Raw File
Tip revision: af9eede56f27215ca38ddd32564017f1f90417d0 authored by Diana Dima on 20 November 2021, 02:04:32 UTC
final clean up fixes
Tip revision: af9eede
sim_readdata_exp1.m
function [rdm] = sim_readdata_exp1(datapath,savefile)
% read and save Meadows multiple arrangement data from json files - Experiment 1
% datapath: data directory
% savefile: data file to be saved
% DC Dima 2020 (diana.c.dima@gmail.com)

nstim = 152; %hard-coded

%find the datafile in the directory
files = dir(datapath);
files = {files(:).name};
files = files{contains(files, '.json')};

data = jsondecode(fileread(fullfile(datapath,files)));

%append datasets in which people didn't hit 'submit'
data = sim_appenddata(data, fullfile(datapath,'additional'));

%save all data as a .mat file
save(fullfile(datapath,'data.mat'),'data')

subnames = fieldnames(data);
nsub = numel(subnames);

incompl_idx = false(nsub,1); %mark incomplete participants
exclude_idx = false(nsub,1); %mark participants excluded after QC

rdm = nan(nsub,nstim,nstim);
rdm_qc = nan(nsub,7,7); %7 stimuli per training

catch_answers = cell(nsub,3);
feedback = cell(nsub,1);
mturk_id = cell(nsub,1);

for isub = 1:nsub
    
    %check if MA task was finished
    datasub = getfield(data,subnames{isub});
    mturk_id{isub} = datasub.tasks{1}.mTurkID;
    
    %first check that they finished the MA task
    if ~strcmp(datasub.tasks{8}.status, 'finished')
        
        incompl_idx(isub) = 1;
        
    else
        
        if isub==1 %get stimulus list in order
            stimlist = datasub.tasks{1}.stimuli;
            stimlist = {stimlist(:).name};
            stimlist = sort(stimlist);
        end
        
        %display catch trials and select participants based on them
        ct = datasub.tasks{7};
        catch_answers{isub,1} = ct.Video1;
        catch_answers{isub,2} = ct.Video2;
        catch_answers{isub,3} = ct.Video3;
        feedback{isub} = datasub.tasks{9}.Feedback;
        
        fprintf('Catch answers for sub %d\n, %s\n,%s\n,%s\n', isub, ct.Video1, ct.Video2, ct.Video3);
        fprintf('\nFeedback: %s\n', feedback{isub})
        x = input('Exclude? Y/N: ', 's');
        
        %no point extracting data for excluded subjects
        if strcmp(x,'Y')
        
            exclude_idx(isub) = 1;
        
        else
            
            %training matrix
            qc = datasub.tasks{5};
            qcstim = {qc.stimuli(:).name};
            [stimlist_qc,idx] = sort(qcstim);
            rdmqcsub = squareform(qc.rdm);
            rdm_qc(isub,:,:) = rdmqcsub(idx,idx);
            
            %full matrix - sort & normalize
            df = datasub.tasks{8};
            rdm(isub,:,:) = sim_assignrdm(df,stimlist);            
            
            
        end
        
    end
    
end

%remove participants who did not complete or were excluded
idx = incompl_idx|exclude_idx;
rdm_qc(idx,:,:) = [];
rdm(idx,:,:) = [];

%save training & MA data
qc = [];
qc.stimlist = stimlist_qc;
qc.rdm = rdm_qc;

save(savefile, 'qc', 'rdm', 'exclude_idx', 'incompl_idx', 'stimlist','catch_answers', 'feedback','mturk_id')




















end
back to top