From 582eeb8ed534c282748c7e86af08b37636cac289 Mon Sep 17 00:00:00 2001 From: zwatson2001 Date: Wed, 30 Apr 2025 13:53:17 -0700 Subject: [PATCH 1/3] add option to run adult reasoning as an 8-item cat --- .../tasks/adult-reasoning/helpers/config.ts | 1 - .../src/tasks/adult-reasoning/timeline.ts | 29 +++++++++++++++---- .../src/tasks/shared/helpers/getCorpus.ts | 9 +++++- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/task-launcher/src/tasks/adult-reasoning/helpers/config.ts b/task-launcher/src/tasks/adult-reasoning/helpers/config.ts index cff34d761..9e848a7d7 100644 --- a/task-launcher/src/tasks/adult-reasoning/helpers/config.ts +++ b/task-launcher/src/tasks/adult-reasoning/helpers/config.ts @@ -26,7 +26,6 @@ export const getLayoutConfig = ( value: stimItem, displayValue: undefined, }; - defaultConfig.inCorrectTrialConfig.onIncorrectTrial = 'skip'; if (!defaultConfig.isInstructionTrial) { const mappedDistractors = mapDistractorsToString(distractors); const prepChoices = prepareChoices(answer.toString(), mappedDistractors, true, trialType); diff --git a/task-launcher/src/tasks/adult-reasoning/timeline.ts b/task-launcher/src/tasks/adult-reasoning/timeline.ts index 226c21685..6acadea1a 100644 --- a/task-launcher/src/tasks/adult-reasoning/timeline.ts +++ b/task-launcher/src/tasks/adult-reasoning/timeline.ts @@ -1,5 +1,5 @@ // setup -import { initTrialSaving, initTimeline, createPreloadTrials, getRealTrials } from '../shared/helpers'; +import { initTrialSaving, initTimeline, createPreloadTrials, getRealTrials, prepareCorpus } from '../shared/helpers'; import { jsPsych, initializeCat } from '../taskSetup'; import { taskStore } from '../../taskStore'; // trials @@ -10,6 +10,7 @@ import { taskFinished, enterFullscreen, finishExperiment, + fixationOnly, } from '../shared/trials'; import { getLayoutConfig } from './helpers/config'; @@ -23,6 +24,8 @@ export default function buildAdultReasoningTimeline(config: Record, const translations: Record = taskStore().translations; const validationErrorMap: Record = {}; + const cat = taskStore().runCat; + taskStore('totalTestTrials', getRealTrials(corpus)); const layoutConfigMap: Record = {}; @@ -48,14 +51,30 @@ export default function buildAdultReasoningTimeline(config: Record, layoutConfigMap, }; - const stimulusBlock = { - timeline: [afcStimulusTemplate(trialConfig)], + const stimulusBlock = (trial?: StimulusType) => { + return { + timeline: [afcStimulusTemplate(trialConfig, trial)] + } }; - const numOfTrials = taskStore().totalTrials; + let numOfTrials; + + if (cat) { + const fullCorpus = prepareCorpus(corpus); + const practice = [...fullCorpus.ipLight, ...fullCorpus.ipHeavy]; + numOfTrials = 8; + + practice.forEach(trial => { + timeline.push({ ...fixationOnly, stimulus: `` }); + timeline.push(stimulusBlock(trial)); + }); + } else { + numOfTrials = taskStore().totalTrials; + } + for (let i = 0; i < numOfTrials; i++) { timeline.push({ ...setupStimulus, stimulus: `` }); - timeline.push(stimulusBlock); + timeline.push(stimulusBlock()); } initializeCat(); diff --git a/task-launcher/src/tasks/shared/helpers/getCorpus.ts b/task-launcher/src/tasks/shared/helpers/getCorpus.ts index 62cfd9846..f167ada6b 100644 --- a/task-launcher/src/tasks/shared/helpers/getCorpus.ts +++ b/task-launcher/src/tasks/shared/helpers/getCorpus.ts @@ -121,7 +121,14 @@ const transformCSV = ( audioFile: row.audio_file, // difficulty must be undefined for non-instruction/practice trials to avoid running cat difficulty: - taskStore().runCat || row.trial_type === 'instructions' || row.assessment_stage === 'practice_response' + taskStore().runCat || + ( + ( + row.trial_type === 'instructions' || + row.assessment_stage === 'practice_response' + ) && + taskStore().heavyInstructions + ) ? parseFloat(row.d || row.difficulty) : NaN, trialNumber: row.trial_num, From e109eceb429f9e0f62149e1fb33f79d16ad3e83e Mon Sep 17 00:00:00 2001 From: zwatson2001 Date: Wed, 30 Apr 2025 14:29:58 -0700 Subject: [PATCH 2/3] parameterize starting block --- task-launcher/src/tasks/adult-reasoning/timeline.ts | 2 +- .../src/tasks/same-different-selection/catTimeline.ts | 2 +- task-launcher/src/tasks/shared/helpers/prepareCat.ts | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/task-launcher/src/tasks/adult-reasoning/timeline.ts b/task-launcher/src/tasks/adult-reasoning/timeline.ts index 6acadea1a..ef7ef1f7e 100644 --- a/task-launcher/src/tasks/adult-reasoning/timeline.ts +++ b/task-launcher/src/tasks/adult-reasoning/timeline.ts @@ -60,7 +60,7 @@ export default function buildAdultReasoningTimeline(config: Record, let numOfTrials; if (cat) { - const fullCorpus = prepareCorpus(corpus); + const fullCorpus = prepareCorpus(corpus, false); const practice = [...fullCorpus.ipLight, ...fullCorpus.ipHeavy]; numOfTrials = 8; diff --git a/task-launcher/src/tasks/same-different-selection/catTimeline.ts b/task-launcher/src/tasks/same-different-selection/catTimeline.ts index ad12df76c..6891431fc 100644 --- a/task-launcher/src/tasks/same-different-selection/catTimeline.ts +++ b/task-launcher/src/tasks/same-different-selection/catTimeline.ts @@ -34,7 +34,7 @@ export default function buildSameDifferentTimelineCat(config: Record !startItems.includes(trial)); + const catCorpus: StimulusType[] = + randomStartBlock ? + normedTrials.filter((trial) => !startItems.includes(trial)) : normedTrials; corpora = { ipHeavy: corpusParts.ipHeavy, // heavy instruction/practice trials From 37a93ebf7f72d09e40c31f5637b2e876db9207cf Mon Sep 17 00:00:00 2001 From: Zach Watson Date: Thu, 19 Feb 2026 13:04:17 -0800 Subject: [PATCH 3/3] fix difficulty logic for instruction trials --- task-launcher/src/tasks/shared/helpers/getCorpus.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/task-launcher/src/tasks/shared/helpers/getCorpus.ts b/task-launcher/src/tasks/shared/helpers/getCorpus.ts index 6b26b12ca..416f375fa 100644 --- a/task-launcher/src/tasks/shared/helpers/getCorpus.ts +++ b/task-launcher/src/tasks/shared/helpers/getCorpus.ts @@ -129,14 +129,8 @@ const transformCSV = ( audioFile: row.audio_file, // difficulty must be undefined for non-instruction/practice trials to avoid running cat difficulty: - taskStore().runCat || - ( - ( - row.trial_type === 'instructions' || - row.assessment_stage === 'practice_response' - ) && - taskStore().heavyInstructions - ) + taskStore().runCat || + (row.trial_type === 'instructions' || row.assessment_stage === 'practice_response') ? parseFloat(row.d || row.difficulty) : NaN, randomize: row.randomize as 'yes' | 'no' | 'at_block_level',