From 0151a56fef0ad00e58dca5819389616924fe5f23 Mon Sep 17 00:00:00 2001
From: "Violante, Ines Dr (Psychology)" <ines.violante@surrey.ac.uk>
Date: Fri, 16 Aug 2024 12:25:53 +0000
Subject: [PATCH] Upload New File

---
 .../functions/StimuliAllocationPractice.m     | 87 +++++++++++++++++++
 1 file changed, 87 insertions(+)
 create mode 100644 AssociativeTask/functions/StimuliAllocationPractice.m

diff --git a/AssociativeTask/functions/StimuliAllocationPractice.m b/AssociativeTask/functions/StimuliAllocationPractice.m
new file mode 100644
index 0000000..d14e88c
--- /dev/null
+++ b/AssociativeTask/functions/StimuliAllocationPractice.m
@@ -0,0 +1,87 @@
+function [stim, TotalTrials] = StimuliAllocationPractice(TaskDir, SubjectInfo)
+%% Allocate stimuli for the task practice
+
+%% Clear the workspace and the screen
+rand('state',sum(100*clock));
+
+%% Specify stimuli directories
+FacesDir = ([TaskDir filesep 'resources' filesep 'practice' filesep 'faces']);
+ObjectsDir = ([TaskDir filesep 'resources' filesep 'practice' filesep 'objects']);
+
+addpath(genpath([TaskDir filesep 'functions']));
+
+%% Parameters
+TotalTrials = SubjectInfo.TotalTrials; 
+
+%% Create stimuli table
+
+stim = table;
+stim.trial = (1:TotalTrials)';
+
+faces = dir([FacesDir filesep '*N.jpg']);
+facesuse = randperm(size(faces,1),(TotalTrials));
+allfaces = struct2table(faces(facesuse));
+stim.name = allfaces.name;
+stim.folder = allfaces.folder;
+
+% Select one object per face for target and distractor
+objects = dir([ObjectsDir filesep '*.jpg']);
+objectsuse = randperm(size(objects,1),(TotalTrials*4)); % multiplied by 4 because half will be targets and the other half distractors
+objtarget = objectsuse(1:2:TotalTrials*2);
+objdist = objectsuse(2:2:TotalTrials*2);
+
+%
+stim.targetnumber = objtarget';
+stim.distractornumber = objdist';
+
+% Objects
+
+for ii=1:height(stim)
+    targetname{ii,:} = objects(stim.targetnumber(ii)).name;
+    targetfolder{ii,:} = [objects(stim.targetnumber(ii)).folder filesep objects(stim.targetnumber(ii)).name];
+
+    distractorname{ii,:} = objects(stim.distractornumber(ii)).name;
+    distractorfolder{ii,:} = [objects(stim.distractornumber(ii)).folder filesep objects(stim.distractornumber(ii)).name];
+end
+
+
+stim.targetname = targetname;
+stim.targetfolder = targetfolder;
+stim.distractorname = distractorname;
+stim.distractorfolder = distractorfolder;
+
+% Add a foil per trial - only rule is that the foil cannot match the target
+pass=0;
+targetn = stim.targetnumber;
+while pass<1
+    idx = targetn(randperm(numel(targetn)));
+    if any(targetn==idx)
+        pass=0;
+    else
+        pass=1;
+    end
+end
+
+stim.foilnumber = idx;
+for ii=1:height(stim)
+    foilname{ii,:} = objects(stim.foilnumber(ii)).name;
+    foilfolder{ii,:} = [objects(stim.foilnumber(ii)).folder filesep objects(stim.foilnumber(ii)).name];
+end
+stim.foilname = foilname;
+stim.foilfolder = foilfolder;
+
+% Define recall position
+pass=0;
+while pass<1
+    OrderResp = randperm(numel(1:TotalTrials));
+    y = intersect(OrderResp(end-1:end),(1:2)); % last two encode cannot be the 1st or 2nd to recall
+    if isempty(y)
+        pass=1;
+    end
+end
+
+stim.orderresp = OrderResp';
+
+
+
+end
-- 
GitLab