Chapitre 5 Syntaxe pour les scripts

Cette page est simplement destinée à rechercher les instructions des scripts du PsyToolkit. Elle suppose que vous savez plus ou moins ce que vous recherchez. Si vous êtes nouveau à PsyToolkit, il est plus facile de commencer à regarder certains des exemples ici ou des exemples plus détaillés dans la bibliothèque d’expériences.

Lien rapide vers toutes les instructions

Autres documents pertinents (en anglais) :

5.1 Comment utiliser cette page de présentation des scripts d’expériences

Cette page énumère tous les éléments possibles d’un script PsyToolkit. Elle donne également une brève description syntaxique. Une syntaxe est une description de la manière dont les instructions peuvent être utilisées. Dans la description syntaxique, les arguments obligatoires d’une instruction sont entre crochets []. Les arguments optionnels entre crochets normaux (). Un signe | indique différentes valeurs valides pour un argument.

Par exemple, prenons l’exemple de l’instruction “show rectangle”. L’exemple ci-dessous montre qu’il y a 4 arguments obligatoires : X,Y,W,H. Il s’agit de la coordonnée x, de la coordonnée y, de la largeur et de la hauteur. Les arguments Rouge, Vert et Bleu sont optionnels (par défaut, un rectangle est blanc, mais vous pouvez lui donner des couleurs différentes)

Les parenthèses dans la description de la syntaxe ne sont bien sûr pas tapées dans le vrai script ; c’est juste une façon de décrire une syntaxe. Regardez attentivement les exemples donnés pour chaque instruction pour voir comment utiliser les instructions.

5.2 Structure des scripts

Il existe différentes sections dans les scripts, et chaque section est séparée des autres par au moins une ligne vide. Tout ce qui suit un hashtag (#) est un commentaire uniquement pour les yeux humain, l’ordinateur l’ignorera. Les principales sections qui contiennent chacune plusieurs lignes sont les suivantes :

  • options de base décrit des paramètres pratiques du PsyToolkit qui ne sont pas par défaut, tels que la taille de l’écran
  • options avancées décrit les options avancées que les débutants peuvent ignorer
  • options linux uniquement options avancées spéciales lors de l’utilisation de la version Linux
  • bitmaps/sons/fonts décrit les stimuli à utiliser
  • La tâche peut être utilisée plusieurs fois pour décrire les essais de paradigmes
  • Le tableau peut être utilisé plusieurs fois pour décrire les conditions expérimentales
  • le bloc peut être utilisé plusieurs fois pour exécuter des blocs d’essais
  • l’ordre des blocs peut être fixé de manière différente (utilisateurs avancés uniquement)

5.3 Option de base

Chaque fois que vous programmez une expérience, vous pouvez vouloir vous écarter des valeurs par défaut. Par exemple, la taille d’écran par défaut d’une expérience est de 800 par 600 pixels, mais vous pouvez la modifier en utilisant l’option “resolution”. Les options disponibles sont énumérées ci-dessous. Au bas de cette section se trouve un exemple complet.

Il existe de nombreuses options, mais elles sont surtout destinées aux utilisateurs avancés. Si vous êtes nouvel utilisateur de PsyToolkit, ignorez dans un premier temps les options.

5.3.1 resolution

Cela détermine la résolution de l’expérience. Cette résolution par défaut est de 800 par 600. Lorsque vous spécifiez la résolution, il s’agit de la largeur par la hauteur, séparées seulement par un espace. Voir l’exemple ci-dessous.

Exemple de plein écran (avec un rectangle de saut aléatoire)

options
  fullscreen
  resolution 1000 800

task MyTask
  set $x random -300 300 # random x position
  set $y random -300 300 # random y position
  set $mysize random 10 100
  show rectangle $x $y $mysize $mysize   255 0 0 # show red rectangle
  delay 100
  clear -1

block MyBlock
  tasklist
    MyTask 200
  end
  

5.3.2 frame

Ceci définit la taille du cadre de l’expérience dans une expérience en ligne lorsqu’elle n’est pas en mode plein écran. Cette fonction est rarement nécessaire, mais il est bon de savoir que vous pouvez l’ajuster.

Dans l’exemple ci-dessous, vous travaillez avec une résolution de 1000 800. Mais sans l’option frame, elle serait réduite à 800 par 600 en mode non plein écran. Si vous voulez que dans le mode non plein écran, la boîte apparaisse plus grande, vous pouvez ajuster cela avec frame.

Exemple de frame

options
  fullscreen
  resolution 1000 800
  frame 1000 800

Frame n’est peut-être pas souvent nécessaire. Lorsque vous l’utiliserez, il aura probablement les mêmes valeurs que le plein écran.

5.3.3 scale

L’option d’échelle scale vous permet de mettre l’écran à l’échelle. Ceci est pratique en mode plein écran ou pour des résolutions plus grandes que la zone par défaut de 800 par 600 pixels. PsyToolkit conservera toujours le rapport d’aspect correct.

Quand cela prend-il effet ?

  • Lorsque vous passez en mode plein écran (la taille augmente).
  • Lorsque vous avez une résolution supérieure à 800 x 600 et que vous n’êtes pas en mode plein écran (l’échelle sera réduite).

Exemple de scale

options
  fullscreen
  scale
  resolution 1600 1200

5.3.4 background color

Vous pouvez spécifier la couleur de fond de l’écran. Par défaut, il est noir, mais vous pouvez le régler ici sur une couleur différente. Vous pouvez la spécifier en utilisant un nom de couleur (rouge, vert, bleu, blanc, jaune, rose, violet, noir, orange) ou un triplet RVB (255 0 0 pour le rouge), ou une combinaison hexadécimale de six lettres/chiffres (FF0000 pour le rouge).

Exemple de fond

options
  background color white

task MyTask
  set $x random -300 300 # random x position
  set $y random -300 300 # random y position
  set $mysize random 10 100
  show rectangle $x $y $mysize $mysize   255 255 0 # show yellow rectangle
  delay 100
  clear -1

block MyBlock
  tasklist
    MyTask 200
  end
  

Un autre exemple utilisant un triplet RGB (dans ce cas, blanc)

options
  background color 255 255 255

Un autre exemple utilisant un hexa code

options
  background color FFFF00

5.3.5 fullscreen

Exécute l’expérience en mode plein écran. Sous Linux, c’est le mode par défaut, alors que dans le navigateur, ce n’est pas le cas.

Dans la version en ligne (Javascript), le mode plein écran ne fonctionne pas dans le navigateur Safari d’Apple (Apple n’autorise pas le mode plein écran et la saisie au clavier).

Exemple de plein écran (avec un rectangle de saut aléatoire)

task MyTask
  set $x random -300 300 # random x position
  set $y random -300 300 # random y position
  set $mysize random 10 100
  show rectangle $x $y $mysize $mysize   255 255 0 # show yellow rectangle
  delay 100
  clear -1

block MyBlock
  tasklist
    MyTask 200
  end

5.3.6 mouse

Par défaut, le curseur de la souris n’est pas affiché, car d’un point de vue psychologique, il peut être un stimulus distrayant. Mais pour certaines expériences, la souris est nécessaire en tant que dispositif de pointage. Cette option permet de s’assurer que le curseur de la souris est visible. La seule valeur utile est “on”.

Exemple d’affichage de la souris dans une expérience

options
  mouse on

L’option ne met la souris en marche qu’au début de l’expérience. Vous pouvez toujours l’éteindre plus tard dans une tâche en utilisant les instructions de masquage et d’affichage de la souris. Cliquez ici pour en savoir plus sur ces deux instructions.

5.3.7 set

Cela vous permet de définir une variable globale. Cela peut être pratique si vous souhaitez tester un paramètre expérimental (par exemple, l’intervalle intertrial) à une valeur spécifique tout au long de l’expérience. Si vous n’utilisez la variable nulle part, cette valeur sera simplement ignorée.

Exemple de “set” dans les options

options
  fullscreen
  set &my_intertrialinterval 100

task MyTask
  set $x random -300 300 # random x position
  set $y random -300 300 # random y position
  set $mysize random 10 100
  show rectangle $x $y $mysize $mysize   255 0 0 # show red rectangle
  delay 100
  clear -1
  delay &my_intertrialinterval

block MyBlock
  tasklist
    MyTask 200
  end

Il est parfois pratique d’avoir défini certains paramètres de base dans les options en tant que variables globales. De cette façon, vous pouvez facilement les retrouver. De bons exemples sont les intervalles entre les essais, les temps de réponse maximums autorisés, la taille du stimulus, etc.

5.3.8 start messages

Dans la version en ligne, chaque expérience commence par une case rouge et le message en anglais “Click to start”. En outre, selon le temps nécessaire pour charger les messages, vous verrez un message attendre une seconde. Vous pouvez modifier ces deux messages avec les deux options suivantes :

Exemple de modification des messages de démarrage

options
  startbutton text My own click-to-start message
  loading text My own wait-a-second message

5.4 Options avancées

5.4.1 var in

Voir l’échange d’information entre les questionnnaires et les expériences

Lorsque vous utilisez PsyToolkit dans le cadre d’enquêtes en ligne, vous pouvez échanger des variables numériques entre les expériences et une enquête.

Vous ne pouvez changer que des variables numériques en nombre entier. C’est-à-dire des nombres tels que 12 ou 3, mais pas des lettres, des combinaisons de chiffres et de lettres, ni des nombres fractionnaires (tels que 12.1 ou 3.4)

Par exemple, vous pouvez poser une question d’enquête demandant l’âge d’une personne, puis utiliser l’âge comme variable dans l’expérience. Vous devez préciser le nom de l’enquête. Vous trouverez ci-dessous un exemple.

Exemple d’une question d’enquête en premier lieu. Note : il ne s’agit donc pas d’un code de script d’expérimentation !

l: sleep
t: range
q: how many hours sleep did you have?
- {min=0,max=10} Select number

l: alcohol
t: range
q: how many glasses of alcohol did you dring?
- {min=0,max=20} Select number

l: the_experiment
t: experiment
- my_experiment

l: information
t: info
q: Your score is {$xxx} and {$yyy}.

Dans l’expérience suivante, les participants sont invités à répondre à un rectangle. Supposons que les personnes endormies ou celles qui consomment de l’alcool ont besoin de plus de temps, nous voulons leur donner plus de temps, afin de leur donner le maximum de temps pour répondre plus longtemps. Nous créons une nouvelle variable MyMaxTime basée sur leur consommation d’alcool et leurs heures de sommeil. Plus ils ont bu ou moins ils ont dormi, plus &MyMaxTime sera élevé. Ceci montre simplement comment vous pouvez utiliser les variables

Notez que les variables sommeil et alcool sont traitées comme des variables globales, et doivent être précédées du signe &.

Exemple d’utilisation d’une réponse à une enquête dans le cadre d’une expérience

options
  var in sleep alcohol

task myTask
  keys space
  show rectangle 0 0 100 100
  set &MyMaxTime expression 1000 + 100 * &alcohol + 100 * ( 10 - &sleep )
  readkey 1 &MyMaxTime
  save RT

block
  tasklist
    myTask 10
  end

5.4.2 var out

Voir l’échange d’information entre les questionnnaires et les expériences

L’option var out peut être utilisée pour sauvegarder une valeur créée dans une expérience directement dans l’enquête. Dans ce cas, la valeur sauvegardée sera disponible dans le feuille de calcul du questionnaire.

Exemple d’utilisation d’une réponse à une enquête dans le cadre d’une expérience

options
  var out my_score

Exemple de question d’enquête fonctionnant avec cela. Notez que ce script est destiné aux enquêtes en ligne uniquement.

l: my_feedback
t: info
q: Your score was {$my_score}

5.4.3 origin

Les stimuli visuels sont présentés à l’écran, et vous devez donner une coordonnée X et une coordonnée Y pour les placer. L’option d’origine indique à l’ordinateur où se trouve le point X=0,Y=0 (ou 0,0).

Par défaut, le point de coordonnées 0,0 est au centre de l’écran. Vous pouvez également définir le coin supérieur gauche de l’écran comme origine (ce qui était la valeur par défaut dans les anciennes versions de PsyToolkit).

Exemple d’utilisation de l’instruction origin

options
  origin topleft

5.4.4 fontdir,datadir,bitmapdir,sounddir

Les options fontdir,datadir,bitmapdir,sounddir vous permettent de modifier les dossiers dans lesquels l’ordinateur s’attend à ce que les stimuli soient enregistrés. Vous n’avez pas besoin de le préciser si les fichiers de stimuli se trouvent dans le même répertoire que votre code de script.

Cette option est particulièrement utile si vous travaillez en C ou si vous faites de grandes expériences.

5.5 Options pour Linux

5.5.1 escape (C seulement)

Dans la version Linux Desktop, cela permet de terminer le programme en appuyant sur la touche d’échappement. Veuillez noter que l’ordinateur vérifie uniquement si la touche d’échappement a été enfoncée à la fin de chaque essai. Par conséquent, si vous utilisez cette option, et si vous souhaitez interrompre votre expérience, vous devez maintenir le bouton d’échappement (ou tout autre bouton utilisé pour l’échappement) pendant la durée d’au moins un essai.

Dans le navigateur, vous pouvez toujours vous échapper de votre expérience, et là, cette option n’est pas nécessaire.

5.5.2 parallelport (C seulement)

Il s’agit d’un codage avancé du port parallèle.

5.5.3 pcidio24 (C seulement)

This is for advanced coding of the pcidio24 port

5.5.4 cedrus (C seulement)

Cela indique que vous avez attaché un clavier Cedrus. En option, vous pouvez spécifier un modèle. Si vous spécifiez un modèle, le script ne fonctionnera qu’avec ce modèle. Cette rigueur n’est nécessaire que dans le cas où vous voulez forcer les gens à utiliser un clavier Cedrus spécifique.

5.5.5 iolab (C seulement)

Il semble que cet appareil ne soit plus produit. PsyToolkit le supporte toujours.

Cela indique que vous avez connecté le dispositif IoLab (un clavier spécial avec des boutons poussoirs). En option, vous pouvez spécifier les paramètres des touches vocales (voir psycc -s)

5.5.6 et (Linux seulement)

Le soutien à l’eye-tracker Tobii est en cours de développement. Actuellement, le code est en cours de développement pour le modèle tx300. Cela ne fonctionne que sur linux

Exemple de comment informer PsyToolkit sur votre eye-tracker Tobii

options
  et tobii 12345

Le numéro 12345 est ici un exemple d’identification d’un tracker Tobii. Il est facultatif de donner ce numéro d’identification.

5.5.7 sprites first (Linux seulement)

Utilisation avancée uniquement

L’option “sprites first” attirera les sprites avant qu’elle n’attire d’autres stimuli. Cela signifie que les sprites seront dessinés en arrière-plan, ce que vous souhaitez pour certaines situations.

5.5.8 executable

Le nom de fichier du programme exécutable. Par défaut, c’est experiment, mais il peut être défini avec l’option de ligne de commande -o et avec cette option.

L’option -o remplacera cette option. Dans la version en ligne, cette option sera ignorée.

5.5.9 egi (C only)

Avec le nom ou l’adresse IP de l’hôte et le port IP (facultatif), il établit une connexion avec le système d’Electrical Geodesics, Inc. Ce système n’a pas été bien testé et est basé sur un ancien code. Vous n’avez pas besoin d’utiliser d’options si vous ne le souhaitez pas.

Exemple de toutes les options de base

options
  resolution 1024 800
  fullscreen
  mouse off
  set &my_variable 100

5.5.10 vsync on|off

Non pertinent pour la version en ligne et pour utilisateurs avancés uniquement. En mode Linux, il est “activé” par défaut, mais peut être désactivé, car certaines cartes graphiques ne permettent pas d’utiliser le vsync. PsyToolkit affichera un message d’erreur s’il n’est pas disponible.

S’il est réglé sur “off”, l’ordinateur n’attend pas la synchronisation du vsync (c’est la valeur par défaut en Javascript). C’est pratique pour les tests, car l’expérience ne nécessite pas l’autorisation de l’administrateur principal lors de la compilation. En C, si vous utilisez l’option -t, c’est la valeur par défaut.

Exemple de vsync désactivé

option
  vsync off

5.5.11 window (C only)

Cela vous permet de mener l’expérience dans une fenêtre plutôt qu’en plein écran. C’est pratique pour les tests. Notez que le mode plein écran est le mode par défaut dans Linux, sauf si vous exécutez en mode test.

Comme PsyToolkit peut fonctionner dans deux environnements de programmation différents, certaines fonctions ne marchent pas dans tous les environnements. Les fonctions C ne fonctionnent que sur la version Linux qui est basée sur le langage de programmation C. Si vous utilisez la version en ligne, vous pouvez les ignorer complètement.

5.5.12 screensize and screendistance (C only)

Vous pouvez définir les dimensions de l’écran et la distance entre les yeux et l’écran. Les unités sont en millimètres. Ces chiffres sont nécessaires si vous voulez utiliser l’option coordonnées polaires ou si vous voulez utiliser l’option de ligne de commande de la taille du stimulus du rapport. Si vous utilisez un système de coordonnées polaires (ce qui est rare), toutes les coordonnées xy doivent être spécifiées en centièmes de degrés (donc 100 = 1 degré, 200 = 2 degrés d’angle visuel). Ceci n’est pas encore bien implémenté (faites-moi savoir si vous en avez besoin).

5.5.13 version

Ce service est réservé aux utilisateurs avancés. Cela permettra uniquement de compiler un script avec la version psycc correspondante. C’est pratique si vous avez plusieurs versions de psycc installées, et si vous voulez juste vous assurer que le code fonctionne. Cette commande n’a aucun effet dans la version en ligne.

5.5.14 check_refresh_rate

Linux seulement. Vous pouvez vérifier si le taux de rafraîchissement est conforme aux attentes, et si ce n’est pas le cas, un message sera affiché à l’écran.

Ceci est utile si vous avez un moniteur avancé et que vous voulez vous assurer que le taux de rafraîchissement n’est pas réinitialisé à une valeur inférieure par un autre gestionnaire de bureau. Notez que seul XFCE dispose d’un moyen agréable de définir la fréquence de rafraîchissement (settings→display).

Exemple de check_refresh_rate

options
  resolution 1920 1080
  check_refresh_rate 144

Dans l’exemple ci-dessus, nous avons réglé l’écran sur ce qui est aujourd’hui une résolution standard (pour en savoir plus sur ce qu’on appelle le “full HD”). Ensuite, nous disons à l’ordinateur que nous nous attendons à ce que la carte graphique et l’écran fonctionnent à un taux de rafraîchissement de 144 Hz. PsyToolkit ne peut pas le régler, mais il peut le vérifier. Si PsyToolkit constate que l’écran ne fonctionne pas à la fréquence de rafraîchissement prévue, il envoie un message puis s’arrête.

Exemple de toutes les options de base

options
  fontdir     /usr/lib/fonts
  datadir     /home/user/mydatadir
  bitmapdir   /usr/local/bitmaps
  sounddir    /usr/local/snd
  origin      topleft
  window
  resolution 1024 800
  screensize 1000 600
  screendistance 500
  coordinates polar
  vsync off
  escape
  egi 10.0.0.42
  parallelport in data out 1 5
  pcidio24 in a b out c_low c_high
  cedrus
  iolab
  executable myexperiment
  set &myinterval 100
  sprites first

5.6 Chargement des stimuli

L’ordinateur doit savoir quels stimuli vous utilisez. Les stimuli sont généralement des images ou des sons, qui doivent être chargés. Vous pouvez également charger des polices de caractères. Vous trouverez ci-dessous des explications sur la manière de charger des images, des sons et des polices.

Les noms de fichiers bitmap et sons ne doivent pas commencer par un chiffre, ni contenir d’espaces ou de caractères spéciaux (à l’exception du soulignement).

5.6.1 bitmaps

La commande bitmaps vous permet de définir un certain nombre de images que vous souhaitez utiliser dans votre expérience. Les images peuvent être de formats courants, png, jpg, bmp et autres.

La ligne bitmaps n’a pas de paramètres et est suivie de lignes décrivant l’image, chaque image ayant un nom et une description de fichier.

Ne mettez rien entre guillemets, et n’utilisez pas d’espaces dans les descriptions ou dans les noms de fichiers.

Si vous n’ajoutez pas de nom de fichier, cela suppose qu’un nom de fichier existe avec l’extension .png. Dans l’exemple ci-dessous, PsyToolkit suppose qu’un fichier house.png existe car aucune autre information bitmap n’est donnée. C’est en fait la méthode de travail recommandée (c’est certainement la plus simple).

Exemple de bitmaps et comment s’y référer dans une tâche

bitmaps
  house
  funnyface funny.bmp
  cookie    stimuli/cookie.jpeg
  smiley    smiley

task MyTask
  show bitmap funnyface
  show bitmap cookie 100 0

Notez que pour les expériences en Javascript dans un navigateur, il existe deux autres façons de charger les bitmaps :

  1. en utilisant le préfixe http:// (donc, au lieu d’un nom de fichier complet, donnez l’URL). Cette façon de procéder est logique dans des circonstances très particulières et n’est généralement pas recommandée, sauf si vous savez vraiment ce que vous faites. La raison est que cela peut réduire considérablement le temps de téléchargement des expériences en ligne. En effet, par défaut, tous les stimuli sont intégrés dans le fichier HTML via data:uri, ce qui peut conduire à des fichiers HTML volumineux.

Voici comment vous procédez dans PsyToolkit

Exemple de chargement de bitmaps à partir de sites web externes

bitmaps
  house http://www.my-website.com/house.png

task MyTask
  show bitmap house
  1. utilisation de data:image/ uris

Pour plus d’informations sur le fonctionnement de l’URI, voir Wikipedia

Les données uri ne sont utilisées que dans des cas très rares et spéciaux, et ne sont généralement pas recommandées (parce qu’elles ne sont pas vraiment nécessaires, mais il existe des raisons techniques inhabituelles pour lesquelles quelqu’un pourrait vouloir les obtenir dans des conditions très inhabituelles)

Exemple de chargement d’images utilisant une URI

bitmaps
  testimage data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAIAAAA7ljmRAAAAGElEQVQIW2P4DwcMDAxAfBvMAhEQMYgcACEHG8ELxtbPAAAAAElFTkSuQmCC

task MyTask
  show bitmap testimage

5.6.2 move

move et relocate ne sont pas souvent utilisés. Ils sont surtout réservés aux animations de base et sont alors très pratiques. move ne donne pas une animation fluide, c’est juste un changement de lieu. Voir la leçon sur les animations simples pour plus de détails. Parfois, vous voulez changer l’emplacement d’un stimulus que vous avez déjà créé à l’écran. Cela peut être utile pour les animations simples.

Vous pouvez le faire avec deux fonctions différentes dans les tâches :

  • move
  • relocate (décrit ci-après)

L’exemple suivant montre un stimulus au centre de l’écran et, après 1000 ms, déplace le stimulus de 20 pixels vers la droite, sans changer l’emplacement y. Ainsi, le déplacement donne la quantité de changement X et Y (alors que le déplacement donne une nouvelle position X/Y complète).

Exemple de déplacement d’un stimulus

bitmaps
  smiley.png

task MyTask
  show bitmap smiley
  delay 1000
  move 1 20 0

5.6.3 relocate

relocate est très similaire à move, sauf que vous ne faites que donner les nouvelles coordonnées.

Exemple de relocalisation d’un stimulus

bitmaps
  smiley.png

task MyTask
  show bitmap smiley
  delay 1000
  relocate 1 100 150

5.6.4 sounds

Cela fonctionne comme les commandes “bitmaps”, simplement pour indiquer à l’ordinateur quels sons sont chargés. Vous pouvez utiliser n’importe quel format de fichier son, bien que le format de fichier wav soit le plus largement utilisé et recommandé pour les études en ligne.

Exemple de sons et comment s’y référer dans une tâche

sounds
  barkingdog bark.wav
  phone      ringingphone.mp3

task MyTask
  sound phone
  delay 300

Comme pour les images bitmap, vous pouvez également charger un son à partir d’un serveur web (en utilisant http://). L’avantage est que cela permet d’accélérer le temps de chargement.

Vous pouvez également utiliser des sons dans le bloc, par exemple pour faire jouer de la musique lorsque le participant effectue la tâche. Cela peut être utilisé pour tester l’effet de différents types de sons, de musique, de bruit de fond sur l’exécution de la tâche. Voir le son dans un bloc.

5.6.5 sound frequencies

Apart from playing sound files, you can also play specific tones or frequencies. This also uses the sound instruction, but now followed by the word freq. Below are various examples:

Outre la lecture de fichiers sonores, vous pouvez également lire des tonalités ou des fréquences spécifiques. Pour ce faire, on utilise également l’instruction sound, mais elle est suivie du mot freq. Vous trouverez ci-dessous plusieurs exemples :

Jouez un son sinusoïdal de 500 Herz (Hz) pendant 1 seconde (1000 ms)

  sound freq sine 400 2000

Jouez un son d’onde carrée de 400 Herz (Hz) pendant 2 secondes (2000 ms)

sound freq sine 400 2000

Jouez un son d’onde triangulaire de 700 Herz (Hz) pendant 1,5 seconde (1500 ms)

Jouez un son d'onde triangulaire de 700 Herz (Hz) pendant 1,5 seconde (1500 ms).

Faites jouer une onde en dents de scie de 600 Herz (Hz) pendant une demi-seconde (500 ms)

  sound freq sawtooth 600 500

Comment arrêter une fréquence sonore. Pour cela, vous utilisez l’instrcuction silence, mais vous devez utiliser un nombre négatif. Le dernier son commencé est -1, celui qui a commencé avant est -2, etc. Voir l’exemple ci-dessous.

Arrêter un son de fréquence avant sa durée réelle

  sound freq sine 400 5000
  delay 500
  sound freq sawtooth 700 5000
  delay 500
  silence -1 # stops the sawtooth
  delay 500
  silence -2 # stops the sine

5.6.6 fonts

Par défaut, si vous ne précisez pas à l’ordinateur quelle police vous souhaitez utiliser, PsyToolkit utilisera Arial 20 points. Vous n’avez pas besoin de définir une police si vous ne voulez rien d’autre qu’un Arial de taille 20 points.

Vous pouvez décrire ici les polices à utiliser. Vous pouvez utiliser les polices intégrées (arial, times, courier) ou charger les polices ttf (depuis la version) 2.3.3 également en Javascript. Si vous les utilisez en ligne, vous devez télécharger votre ttf comme vous téléchargez n’importe quel autre stimulus.

Notez que les mêmes polices portent des noms différents. Si vous ne connaissez pas les types les plus courants, consultez WikiPedia pour obtenir des informations sur Arial, des informations sur Times New Roman et des informations sur Courier.

Vous pouvez utiliser l’un des trois types de police par défaut : arial, times ou courier. Si vous utilisez l’une de ces trois polices, vous n’avez pas besoin de télécharger ou d’inclure un fichier de police, car ces polices sont déjà disponibles sur les ordinateurs. Sous Linux, Arial=FreeSans.ttf, Times=FreeSerif.ttf, et Courier=FreeMono.ttf.

Exemple de polices et comment s’y référer dans une tâche

fonts
  arial 18
  myfont times 20
  mysmallfont arial.ttf 20
  mybigfont   arial.ttf 40

task MyTask
  font mysmallfont
  show text "hello"
  delay 1000
  font mybigfont
  show text "world"
  delay 1000
  font arial
  show text "Some text in standard arial"
  font myfont
  show text "Some text in Times New Roman"
  delay 1000

voir aussi Show text

5.6.7 videos

Vous pouvez utiliser des vidéos dans votre expérience. Vous devez indiquer à PsyToolkit où les vidéos sont stockées sur Internet. Vous ne pouvez pas les stocker sur le serveur PsyToolkit lui-même.

Il est plus facile de télécharger un fichier vidéo sur le Google Drive ou sur la Dropbox. Il y a une leçon sur la façon de le faire en détail (en anglais).

Vous pouvez donner n’importe quel nom à la vidéo, par exemple, dans l’exemple ci-dessous, clip1 et clip2 ont été choisis, mais il pourrait tout aussi bien s’agir de my_video1 et my_video2.

Exemple d’une section vidéo avec deux clips

videos
  clip1 https://www.dropbox.com/s/kzo7sx7hkdai16i/beetle.mp4?dl=0
  clip2 https://www.dropbox.com/s/bzbs6qpk7ht9yyu/frog.mp4?dl=0

5.7 Les tâches

Dans PsyToolkit, une tâche décrit (typiquement) la séquence d’un seul essai d’une expérience.

Les tâches sont la partie la plus difficile du langage de script, car elles impliquent l’écriture de véritables instructions informatiques séquentielles pour montrer des stimuli, attendre des réponses, etc. Beaucoup de choses sont possibles, et il existe de nombreux types d’instructions différentes. Chaque type d’instruction est décrit ci-dessous.

Avant de décrire les instructions, un certain nombre d’éléments fondamentaux du langage sont décrits, à savoir la structure des tâches, les variables et les repères temporelles

5.7.1 Comment les tâches sont structurées

Les tâches servent en fait à programmer ce qui se passe dans un essai de paradigme expérimental. Une tâche n’est qu’une séquence d’instructions, terminée par une ligne vide. Les instructions contiennent les grandes parties d’information suivantes :

  • Où se trouve une description des différentes conditions expérimentales. Cela peut être fait avec l’état de la table
  • Comment le participant doit-il réagir exactement (par exemple, quelles touches du clavier, ou avec la souris). Cela peut être fait, par exemple, avec keys et readkeys.
  • Les stimuli utilisés, ainsi que le moment et le lieu où ils doivent être présentés. Cela peut se faire avec show et sound.
  • Les données qui doivent être enregistrées dans un fichier pour une analyse ultérieure des données. Cela se fait avec l’instruction save

5.7.2 le concept de variables

Comme tout langage informatique, vous pouvez utiliser des variables. Il existe des variables globales et des variables locales. En principe, vous pouvez toujours utiliser des variables globales. Les variables locales ne sont utilisées que dans une tâche, tandis que les variables globales peuvent être utilisées n’importe où dans la tâche et le code de bloc (voir aussi blocs). Vous pouvez définir les valeurs initiales des variables globales dans les options.

Vous pouvez définir une variable avec l’instruction set.

Exemple de définition et d’utilisation des variables

task MyTask
  set $x 100
  set &y 10
  show bitmap FunnyFace $x &y
  • Les variables ne peuvent avoir que des valeurs entières. Un entier est un nombre entier. Par exemple, $x est 100, il ne peut pas être 100.342, car ce dernier n’est pas un nombre entier.
  • Le signe égal n’est pas utilisé pour attribuer des valeurs aux variables ! C’est-à-dire pas de symbole “=” comme on le ferait dans la plupart des langages de programmation.
  • Les variables ne peuvent pas commencer par un nombre, ne peuvent pas contenir d’espaces, de signes moins, de points ou de caractères spéciaux, à l’exception du soulignement.

De bons exemples.

  • $MyVariable1
  • ma_variable_1
  • $xyz

Les écritures suivantes ne sont pas autorisées !!!!!!

  • $My Variable 1 (raison : pas d’espaces autorisés)
  • $My.variable.1 (raison : pas de points autorisés)
  • $My-variable-1 (raison : pas de signes moins autorisés)
  • $My*variable (raison : aucun caractère spécial tel que “*” n’est autorisé)
  • 123my_variable (raison : ne peut pas commencer par un numéro)

Il existe également des types particuliers de variables écrites en majuscules, comme RT, STATUS, TABLEROW, TASKNAME, BLOCKNAME, BLOCKNUMBER, BLOCKORDER. Elles vous donnent simplement accès à des informations importantes sur une réponse ou sur l’état de la tâche.

5.7.3 Le concept d’horodatage

l’horodatage (timestamps) est un type spécial de variable, mais il n’est utilisé que dans des scripts très avancés et n’est normalement pas nécessaire. Chaque fois que vous définissez un timestamps, l’heure courante est enregistrée.

5.7.4 La fonction set

Avec set, vous pouvez assigner des valeurs à des variables.

set [$&] [nom de la variable] [nouvelle valeur, variable ou expression]

Comme nous l’avons expliqué à propos des “variables”, la fonction set peut fixer la valeur des variables.

  • Une variable est un élément de base dans tout langage de programmation. Une variable est simplement un symbole qui contient une valeur. Par exemple, x = 10. PsyToolkit ne peut fonctionner qu’avec des nombres entiers comme valeurs.
  • set est une fonction relativement avancée, et lors de l’apprentissage de PsyToolkit, vous n’en avez pas immédiatement besoin, et vous pouvez écrire des scripts sans set.
  • set est une fonction relativement avancée, et lorsque vous apprenez PsyToolkit, vous n’en avez pas immédiatement besoin, et vous pouvez écrire des scripts sans set. set est une variable locale qui a une valeur (le $ indique qu’elle est locale)

Définir une variable locale à une valeur (le $ indique qu’elle est locale)

set $x 10

définir une variable globale à une valeur (le & indique qu’elle est golabale)

set &x 10

Dans ce qui suit, la nature locale ou globale de la variable n’est pas pertinente pour expliquer l’ensemble, et nous travaillons simplement avec $x

Prendre la valeur d’une autre variable

set $x &y

Augmenter la valeur d’une variable

set $x 10
set $x increase 2  # after this, $x has value 12

Diminuer la valeur d’une variable (le pas par défaut est de 1)

set $x 10
set $x decrease # after this, $x has value 9

Utiliser une expression mathématique

set $x expression $x / 2 + $a + 1

Tirer une valeur aléatoire

set $x random 1 10

Tirer une valeur aléatoire avec un pas de 2

set $x random 2 100 2

Tirer une valeur aléatoire d’un ensemble spécifique de valeurs

set $x random from 1 2 3 5 10

Régler la valeur de la carte d’entrée/sortie pcidio24 (si vous en avez une !) (pour les utilisateurs avancés, Linux uniquement)

set $x pcidio24 a # set to value of register A

Régler sur les millisecondes qui se sont écoulées depuis le début de l’expérience (pour les utilisateurs avancés)

set $x time-since-start

Régler sur la différence en millisecondes de deux horodatages (pour les utilisateurs avancés)

timestamp MyTime1
delay 500
timestamp MyTime2
set $x timestamp-diff MyTime1 MyTime2 # now x should be 500

obtenir l’horodatage en secondes et millisecondes (pour les utilisateurs avancés)

timestamp MyTime1
dely 2500
timestamp MyTime2
set $x timestamp-seconds MyTime2 # value should be 2
set $x timestamp-milliseconds MyTime2 # value should be 2500

obtenir le temps en millisecondes depuis le 1er janvier 1970 (pour les utilisateurs avancés)

set $x unix-time
save $x

obtenir le numéro de l’image actuellement sous la souris (pour les utilisateurs avancés)

bitmaps
  myface
  yourface
  smileyface

task test
  show bitmap yourface -100 0    ## first bitmap
  show bitmap smileyface 200 200 ## second bitmap
  readmouse l 1 1000
  set $myMouseX MOUSE_X # current mouse x-coordinate
  set $myMouseY MOUSE_Y # current mouse x-coordinate
  set $x bitmap-under-mouse $myMouseX $myMouseY ## $x should be 1
  

Vous pouvez définir des variables de texte. Les variables de texte commencent toujours par le caractère %, juste pour indiquer à PsyToolkit que nous avons une variable de texte ici.

Vous pouvez créer une nouvelle variable de texte en collant différents éléments ensemble, puis l’afficher. Ceci est particulièrement utile pour donner à un participant un feedback sur le TR ou le nombre d’erreurs, comme dans l’exemple ci-dessous.

définir une variable texte

task test
  keys x
  show rectangle 0 0 100 100  255 0 0
  readkey 1 2000
  set $myvar random 1 100
  set %y "Hello " RT " " $myvar
  show text %y
  delay 2000

block testx
  tasklist
      test 2
  end

fixer la variable à la durée du stimulus sonore (fichier)

  set $x duration my_sound

mettre une variable texte comme sous-chaîne d’une autre variable texte ; ici, on prend les lettres 1 à 5

task test
  keys x
  show rectangle 0 0 100 100  255 0 0
  readkey 1 2000
  set $myvar random 1 100
  set %y "Hello " RT " " $myvar
  set %k %y[1,5]
  show text %k
  delay 2000

block testx
  tasklist
      test 2
  end

Pour les sous-chaînes, vous utilisez un système d’indexation :

set %text1 “PsyToolkit”

set %text2 text1[1] → text2 est “P” set %text2 text1[-1] → text2 est “t” (dernière lettre) set %text2 text1[-2] → text2 est “i” (avant-dernière lettre)

set %text2 text1[1,-1] → text2 est “PsyToolkit” (première à dernière lettre) set %text2 text1[1,3] → text2 est “Psy” (lettre 1 à lettre 3) set %text2 text1[-3,-1] → text2 est “kit” (troisième à dernière lettre)

5.7.5 définir une variable liste

Ces instruyctions sont destinés aux utilisateurs un peu plus expérimentés. Assurez-vous d’abord de comprendre les instructions relatives aux tableaux. Dans PsyToolkit, un tableau est simplement une liste de nombres entiers, tels que 1 2 3 4 5. * Chaque variable de tableau est une variable globale, c’est-à-dire qu’elle reste la même tout au long des essais et des différentes tâches.

En bref, vous pouvez appliquer les fonctions suivantes (vous trouverez des exemples plus détaillés plus loin) :

|——————-|———————————————————–|———————–| | Instruction | Ce que cela fait | Exemple | |——————-|———————————————————–|———————–| | set | définir une liste comme une suite de valeurs | set &&x 4 2 10 -1 | | sort | trier une suite de valeur | set &&x sort | | range | Remplir une liste avec un intervalle | set &&x range 1 5 | | shuffle | mélanger les valeurs d’une liste de façon aléatoire | set &&x shuffle | | remove | supprimer une valeur d’une liste | set &&x remove first | | sample | prendre n valeurs dans une liste de façon aléatoire | set &&x &&y sample 10 | | uniq | supprimer toutes les valeurs apparaissant plus d’une fois | set &&x uniq | | append | ajoute une valeur à la fin de la liste | set &&x prepend 10 | | clear | supprimer toutes les valeurs d’une liste | set &&xx clear | | value times n | répéter une valeur (ou une liste) plusieurs fois | set &&x 10 times 5 | |——————-|———————————————————–|———————–|

Toutes les instructions de cette sous-section s’appliquent uniquement aux tableaux entiers (texte ou numérique). Une section distincte est consacrée à l’extraction de valeurs de tableaux.

Définir une liste de nombre

task test
  set &&my_array 1 2 5 2 4 1 0 10

Supprime toutes les valeurs d’une (après quoi elle sera vide)

task test
  set &&my_array clear

Remplir la liste avec un intervalle, dans ce cas 1 2 3 4 5

task test
  set &&my_array range 1 5

L’instruction ci-dessous supprime une valeur du tableau, mais vous ne saurez pas laquelle (voir ci-dessous pour l’autre suppression pour faire cela).

Si une liste a une valeur, supprimer cette valeur (dans ce cas, la valeur 3)

task test
  set &&my_array 1 2 3 4
  set &&my_array remove value 3

Supprimez la première valeur de la liste Par exemple : 1 2 3 4 devient 2 3 4

task test
  set &&my_array 1 2 3 4
  set &&my_array remove first

Supprimez la dernière valeur de la liste. Par exemple : 1 2 3 4 devient 1 2 3

task test
  set &&my_array 1 2 3 4
  set &&my_array remove last

Retirer une position spécifique de la liste. Par exemple : 10 4 20 100 devient 10 20 100

task test
  set &&my_array 10 4 20 100
  set &&my_array remove position 2

Retirer au hasard une position de la liste

task test
  set &&my_array remove random
Fill the array with the value 2, repeated 10x (thus becoming 2 2 2 2 2).
task test
  set &&my_array 2 times 5

Remplir la liste avec 3 valeurs aléatoires entre 5 et 10

task test
  set &&my_array random 5 10 times 3

Vous pouvez également répéter des listes Ainsi, dans l’exemple suivant, nous avons une liste &&mes_numéros avec le contenu 1 2 3. Après avoir fait cela fois 3, nous avons 1 2 3 1 2 3 1 2 3.

Répétez unne liste 3 fois

task test
  set &&my_numbers 1 2 3
  set &&my_array &&my_numbers times 3

Trier les valeurs d’une liste (du plus petit au plus grand)

task test
  set &&my_numbers sort

Trier les valeurs d’une liste (de la plus grande à la plus petite)

task test
  set &&my_numbers sort reverse

Supprimez toutes les valeurs d’une liste qui apparaissent plus d’une fois

task test
  set &&my_numbers uniq

Vous pouvez également utiliser des tableaux de texte, en les faisant commencer par %%, voir l’exemple ci-dessous.

Supprimez toutes les valeurs d’une liste qui apparaissent plus d’une fois

task test
  set %%my_list "Hello" "this" "is" "PsyToolkit"

5.7.6 définir une variable à partir d’une liste

  • Ces instructions sont destinées aux utilisateurs un peu plus expérimentés. Assurez-vous d’abord de bien comprendre les instructions set.
  • Dans PsyToolkit, un tableau est simplement une série de nombres entiers, tels que 1 2 3 4 5.

|——–|——————————————————————————————————| | code | Ce que cela fait | |—————————————|———————————————————————–| | locate | trouver la position d’une valeur dans la liste | | remove | prendre et enlever d’une liste (first, last ou une position spécifique dans la liste) | | use | utiliser mais pas enlever d’une liste (first, last, random ou une position spécifique dans la liste)| | size | prendre un nombre d’items dans une liste | | join | mettre dans une varaible text la réunion d’éléments textuels d’une liste | |——–|——————————————————————————————————|

Dans l’exemple ci-dessous, nous pouvons définir une liste avec les valeurs 4 5 2 10. Dans cette liste, la deuxième valeur (c’est-à-dire la position 2) contient 5. Ainsi, &x sera égal à 2 après cela.

Repérer la position d’une valeur spécifique dans une liste

task test
  set &&my_area 4 5 2 10
  set &x &&my_array locate 5

Dans l’exemple suivant, la variable globale &x aura la valeur 4 (la première), et la liste &&my_area sera réduit à 5 2 10.

Obtenir et supprimer une valeur d’une liste

task test
  set &&my_area 4 5 2 10
  set &x &&my_array remove first

Dans l’exemple suivant, la variable globale &x obtiendra la valeur 10 (la dernière), et la liste &&my_area sera réduit à 4 5 2.

Obtenir et supprimer une valeur d’une liste

task test
  set &&my_area 4 5 2 10
  set &x &&my_array remove last

Dans l’exemple suivant, la variable globale &x prendra la valeur 5 (qui se trouve à la position retirée 2). Le tableau sera alors 4 2 10

Obtenir et supprimer une valeur d’une liste

task test
  set &&my_area 4 5 2 10
  set &x &&my_array remove 2
  • Note : au lieu de remove, vous pouvez utiliser l’instruction use. La seule différence est que le tableau ne sera pas modifié. vous pouvez également supprimer une valeur au hasard.

Obtenir la taille d’une liste (dans l’exemple, &x deviendra donc 4)

task test
  set &&my_area 7 5 2 10
  set &x &&my_array size
Sort and join an array with spaces
task test
  set %%my_array "Smith" "hello" "John"
  set %%my_array sort
  set %my_sentence %%my_array join " "

5.7.7 Synthèse de la fonction set

Le set n’est pas nécessaire pour les débutants ! Il permet vraiment une flexibilité dans votre code, si vous le voulez et en avez besoin. Pour chaque fonction set, vous pouvez utiliser des variables locales ou globales. Ne vous inquiétez pas de la différence entre les variables locales et globales ; en cas de doute, utilisez des variables globales (en commençant par le signe &).

Usages basiques

Instructions de base Exemple Résultat
Assigner une valeur à une variable locale set $x 10 $x contient 10 (seules les valeurs entières sont permisses)
Assigner une valeur à une variable globale set &g 12 &g contient 12
Assigner une valeur à partir d’une autre variable set &h RT avec une commande readkey plus tôt, donne la valeur de RT à &h
Tirer une valeur aléatoire set &x random 1 5 &x contient une des valeurs 1,2,3,4 ou 5
Tirer une valeur aléatoire avec un pas set &x random 1 10 2 &x contient une des valeurs 1,3,5,7 ou 9
Augmenter la valeur d’une variable set &x increase si &x contient 5, après la commande il contiendra 6
Augmenter la valeur d’une variable avec une valeur set &x increase si &x contient 5, après la commande il contiendra 8
Diminuer set &a decrease fonctionne comme increase, sauf qu’elle diminue la valeur
Assigner une valeur à partir d’une expression set $y expression $x * 3 + 5 si &x contient 5 alors $y sera de 20

Usages avancés

gestion du temps Exemple Resultat
Temps depuis le début de l’expérience en ms set $j time-since-start si votre expérience a démarré depuis 5 secondes $j contiendra 5000
Calculer la différence entre deux horodatages set $t timestamp-diff Time1 Time2 si Time1 a été mesuré plus tôt que Time2, $t contiendra la différence en millisecondes
Calculer la différence entre deux horodatages en secondes set $t timestamp-seconds Time1 l’horodatage en secondes
Calculer la différence entre deux horodatages en millisecondes set $ms timestamp-milliseconds Time1 l’horodatage en millisecondes
Contrôles de la souris Exemple Resultat
Trouver le numéro du stimulus cliqué set $b bitmap-under-mouse si le dernier stimulus cliqué est le 5, $b contient 5
Trouver le numéro du stimulus cliqué en ne considérant que certains numéros set $b bitmap-under-mouse range 10 15 si le dernier stimulus cliqué est 11 a été cliqué, $b contiendra 11. Les autres stimuli seront ignorés. Ceci est pratique pour les stimuli qui se chevauchent.
Autres fonctions avancées Exemple Resultat
Trouver le dernier stimulus affiché set $c show-counter Si vous avez montré le stimulus 10, $c contient 10
Autres fonctions Linux seulement Exemple Resultat
Récupérer la valeur d’une carte PCI-DIO24 set $z pcidio24 a mettre $z à la valeur de 8 bits du canal a (valeur comprise entre 0 et 255)
Position x courante à l’écran du symbole set $x sprite-x 2 Si on affiche un symbole 2, met dans $x la coordonnée x à l’écran du symbole
Position y courante à l’écran du symbole set $y sprite-y 2 Si on affiche un symbole 2, met dans $y la coordonnée y à l’écran du symbole

5.8 Instructions communément utilisées

Il existe de nombreuses instructions différentes pour montrer les stimuli, enregistrer et sauvegarder les réponses. Elles sont toutes énumérées ci-dessous avec un bref exemple de leur utilisation. Cette section décrit ceux qui sont le plus souvent utilisés, et que vous devez vraiment comprendre.

Avant de commencer, voici une liste alphabétique des instructions les plus couramment utilisées :

présentation des stimuli

  • Show montre un stimulus sur l’écran
  • clear supprime un stimulus de l’écran
  • sound joue un son

la mesure des réponses et des délais de réponse

  • keys indique à l’ordinateur quelles sont les touches utilisées dans une tâche
  • readkey attend une pression sur le clavier
  • readkeys attent qu’on appuie plusieurs fois sur le clavier
  • readmouse attend un clic ou un mouvement de souris
  • textbox permet d’entrer du texte, y compris des caractère spéciaux
  • choose la sélection de stimuli multiples avec la souris
  • rate, la façon la plus simple d’inclure l’échelle de Likert dans votre expérience

Gérer le temps

  • delay d’attente en millisecondes

sauvegarde des données

  • save, sauvegarde les données dans un fichier

informer l’ordinateur sur les conditions d’expérimentation

  • table indique où se trouvent les conditions de l’expérience

conditions

  • if, faire quelque chose qui dépend de d’une ou des variable(s)
  • while faire quelque chose qui dépend de d’une ou des variable(s)
  • set définir une variable
  • set form array paramétrer une variable à partir d’une valeur d’une liste

Chacune de ces instructions est détaillée ci-dessous.

5.8.1 keys

syntaxe

keys [liste de touches]

Au début de la description d’une tâche, vous devez indiquer à l’ordinateur les touches du clavier sur lesquelles les participants devront éventuellement appuyer. Cette ligne doit être l’une des premières lignes de la description de la tâche.

Les touches données seront associées à un numéro de clavier, commençant par un. Vous pouvez l’utiliser lors de la sauvegarde des données. La variable KEY contiendra cette valeur lorsqu’une touche a été enfoncée.

exemple d’utilisation de keys utilisant deux touches

keys a z

Liste de toutes les touches disponibles sur toutes les plateformes :

  • lettres : a à z
  • les chiffres : 0 à 9
  • touches spéciales : enter, capslock, tab, space, end, home, insert
  • touches spéciales : escape, slash, backslash, quote, comma, period
  • touches fléchées : haut bas droite gauche
  • clavier numérique (keypad) : kp0 kp1 kp2 kp3 kp4 kp5 kp6 kp7 kp8 kp9 clavier numérique : kp_period kp_slash kp_star kp_minus kp_plus kp_enter

Les touches suivantes ne sont pas disponibles en mode Javascript

  • touches de déplacement : lshift rshift
  • touches de contrôle : lcontrol rcontrol
  • touches alt : lalt ralt
  • touches logo : lsuper rsuper

5.8.2 mouse on or off

Vous pouvez masquer (off) ou afficher (on) le curseur de la souris. Regardez les lignes suivantes que vous pouvez utiliser dans une tâche.

Exemple d’affichage ou de masquage du curseur de la souris dans une tâche

task MyTask
  show bitmap smileyface
  mouse hide
  delay 1000
  show bitmap smileyface
  mouse show
  delay 1000

5.8.3 table

syntaxe

table [nom de la table]

Une instruction table permet de définir une table (qui est définie séparément de la tâche, et elle contiendra des informations sur les différentes instructions expérimentales).les tables vous permettent d’avoir une description de tâche pour différentes conditions. De cette façon, vous pouvez faire varier la couleur, la position ou la taille des stimuli. Chaque ligne d’une table sera considérée comme la description d’une condition expérimentale différente. C’est un élément clé des scripts PsyToolkit, bien que vous puissiez aussi écrire des scripts sans table !

Si vous avez plus d’une tâche et plus d’une table, vous devez spécifier dans votre tâche quelle table lui appartient. La ligne du tableau choisie sur une épreuve donnée se trouve dans la variable TABLEROW.

Exemple de table

table MyTable

5.8.4 show

syntaxe

show [bitmap|text|rectangle|circle|video](X,Y)(…)

C’est une instruction essentielle qui permet de montrer les stimuli des types suivants:

Le nombre de paramètres donnés pour une instruction show peut varié. Vous trouverez ici une explication détaillée de la façon dont vous présentez vos stimuli à l’écran, là où vous voulez qu’ils soient.

5.8.5 show bitmap

syntaxe

show bitmap [nom de l'image](X,Y)

Imaginez que vous avez chargé une image dans la section " bitmap " de votre description de tâche. Vous pouvez maintenant la montrer. Il vous suffit de spécifier le fichier image, et celui-ci s’affichera au centre de l’écran. Vous pouvez également spécifier les coordonnées X et Y (facultatif).

Exemple d’usage de show bitmap

show bitmap MyBitmap
show bitmap MyBitmap 200 10

Plus d’informations sur la façon de montrer les images sont disponibles dans cette leçon.


5.8.6 show rectangle

*syntaxe**

show rectangle X,Y,Width,Height, Red,Green,Blue

Vous pouvez afficher des rectangles colorés, en spécifiant la position X et Y ainsi que la largeur et la hauteur. Vous devez également spécifier les valeurs Rouge, Vert et Bleu. Cela signifie que vous aurez 7 paramètres supplémentaires !

Dans l’exemple ci-dessous, un rectangle est affiché à la position 0,0 et il a une largeur et une hauteur de 100 pixels. Les valeurs rouge/vert/bleu sont fixées à 255/0/0. La valeur maximale dans chacun de ces trois canaux de couleur est 255. Étant donné que seul le rouge est spécifié, le rectangle sera rouge.

PsyToolkit utilise le modèle de couleur Rouge-Vert-Bleu (RVB). Chaque couleur peut être spécifiée comme une combinaison de rouge, de vert et de bleu. Pour chacune de ces trois couleurs de base, vous devez donner une valeur comprise entre zéro et 255. Vous pouvez créer n’importe quelle couleur, voir le modèle RVB sur wikipedia. Il existe des sites web où vous pouvez créer vos propres couleurs :

Couleur Rouge Vert Bleu
Blanc 255 255 255
Rouge pur 255 0 0
Bleu pur 0 0 255
vert pur 0 255 0
Jaune 255 255 0
Gris 128 128 128
Orange 255 128 0
Rose 255 100 180

Exemple d’usage de show rectangle

show rectangle 0 0 100 100 255 0 0

5.8.7 show circle

Montrer un cercle. Simailaire à show rectangle.

syntaxe

show circle X,Y,Radius, Red,Green,Blue

Le troisième paramètre est le rayon en pixels (donc le diametre est le double du rayon).

Exemple d’usage de show circle

show circle 0 0 100   255 0 0

5.8.8 show background

syntaxe

show background (Red,Green,Blue)

Il existe également un moyen plus simple de le définir en utilisant l’option couleur de fond.

Parfois, vous voulez que l’ensemble de l’écran ait une couleur spécifique. En principe, vous pouvez simplement dessiner un rectangle de la taille de l’écran. C’est exactement ce que fait la fonction “show background”. Il vous suffit de donner les trois paramètres de couleur et l’écran entier sera rempli de cette couleur. Sinon, elle est traitée comme un stimulus d’écran normal, elle a un numéro et peut être effacée.

Exemple d’usage de show background

show background 100 100 100 ## creates a grey background
delay 500
show rectangle 100 200 200 0 0 ## draw red rectangle
delay 1000
clear -1 ## erase the the rectangle

Vous n’avez pas besoin d’effacer le fond d’écran. Il restera jusqu’au prochain essai (ce qui est en général ce que les gens veulent)


5.8.9 show text

L’instruction show text montre un texte.

Exemple basique d’usage de show text pour Linux

table MyFirstTable
  10 "some text"
  15 "some other text"

task MyTask
  show text "Some green text"  0 0   0 255 0
  show text @2  0 0   0 255 0

Par défaut, si vous ne dites pas à l’ordinateur quelle police vous voulez utiliser, PsyToolkit utilisera Arial 20 points. Vous n’avez pas besoin de définir une police si vous ne voulez rien d’autre qu’un Arial de taille 20 points. Il existe de nombreuses polices ttf disponibles gratuitement sur le web. Par exemple avec Font Squirrel. Si vous le souhaitez, vous pouvez également spécifier une police et une taille de police dans la section fonts.

syntaxe

show text [text](X,Y)(Red,Green,Blue)

Exemple basique d’usage de show text avec une font spécifique

fonts
  MyArial comic.ttf 20

table MyFirstTable
  10 "some text"
  15 "some other text"

task MyTask
  font MyArial
  table MyFirstTable
  show text "Some green text"  0 0   0 255 0
  show text @2  0 0   0 255 0

L’alignement par défaut est “centré”. Cela signifie que si vous demandez de présenter quelque chose à la position 10,10, c’est là que se trouve le centre du mot. Voir la façon de définir l’alignement dans l’exemple ci-dessous. Notez également que vous pouvez définir la couleur du texte pour toutes les commandes “show text” suivantes, vous pouvez ainsi afficher un mot en couleur.

Alors que “show text …” sert à afficher le texte, vous pouvez régler l’alignement des couleurs séparément. C’est pratique si vous voulez par exemple présenter plusieurs textes dans la même couleur.

Exemple d’instructions text et show text avec alignement et couleur

fonts
  arial 20

task MyTask
  text color yellow
  text align center
  show text "Some text with alignment: center"  0 -100
  text align left
  show text "Some text with alignment: left" 0 0
  text align right
  show text "Some text with alignment: right"  0 100
  delay 10000

block test
  tasklist
    MyTask 1
  end
  • Les couleurs de mots suivantes sont actuellement implémentées : blanc, jaune, rouge, vert, bleu, rose, violet, noir, gris, orange, rose.
  • Pour la “couleur du texte”, vous pouvez également spécifier la couleur avec trois valeurs décimales ou sous forme de code hexadécimal à 6 caractères. Dans l’exemple ci-dessous pour la même couleur jaune est déclarée de trois manières différentes. Cet exemple n’a aucun sens dans une expérience réelle (pourquoi spécifier la même couleur trois fois de suite ?), mais montre simplement comment utiliser l’instruction “text color”.

Exemple d’usage de text color

  # specify color as word:
  text color yellow
  # specify color as Red Green Blue code:
  text color 255 255 0
  # specify color as Hexadecimal value:
  text color FFFF00

Vous pouvez également utiliser un nom de couleur directement dans la ligne de texte de l’instriction show, comme suit :

Exemple de nom de couleur

  show text "Hello" 0 0 red

5.8.10 show video

Exemple de vidéo au centre de l’écran

   show video my_clip

Exemple d’une vidéo qui peut être placée comme les autres stimuli

   show video my_clip -100 100

Exemple d’une vidéo muette (sans son)

   videocontrol my_clip mute
   show video my_clip -100 100

5.8.11 clear

syntaxe

clear [Numéro d'ordre de l'image ou liste de numéro d'ordre d'images]

Pour effacer un stimulus que vous mettez à l’écran avec “show”, vous pouvez l’effacer avec “clear”. L’appel “clear” prend au moins un paramètre. Le nombre correspond au numéro des appels de show. Par exemple, si vous voulez effacer un bitmap particulier qui a été montré comme le deuxième événement de show dans votre tâche, utilisez “clear 2”. Vous pouvez également utiliser des numéros de référence négatifs pour vous référer aux stimuli précédents : -1 correspond à la dernière image bitmap présentée ! L’utilisation des références négatives est en fait beaucoup plus facile à utiliser, car de cette façon vous n’avez pas besoin de compter les bitmaps.

Le compteur des images est remis à zéro à chaque essai !

Exemple d’utilisation de clear

show bitmap redcircle
show bitmap greencircle
delay 500
clear 2 # clears the second presented bitmap
# or
show bitmap redcircle
show bitmap greencircle
delay 500
clear -1 # clears last presented bitmap, that is "green circle"
# or
show bitmap redcircle
show bitmap greencircle
delay 500
clear 1 2 # clears both bitmaps

Parfois, vous voulez effacer tellement de stimuli qu’il est désagréable de devoir taper tous les numéros S’ils sont dans une plage. Vous pouvez spécifier la plage. Par exemple, clear range 1 10 efface les stimuli 1 2 3 4 5 6 8 9 10. Il est rare que vous souhaitiez effacer tout l’écran. Ce n’est pas recommandé pour raisons de temps, car cela peut être plus lent que de changer de petites parties de l’écran, mais vous pouvez vouloir effacer tout l’écran au début ou à la fin d’un essai. Pour ce faire, vous pouvez utiliser la fonction clear screen.

5.8.12 hide/unhide

La fonction de hide fait exactement ce que fait la fonction de clear, sauf que de cette façon, vous pouvez aussi à nouveau afficher le stimulus (unhide). En utilisant hide, vous ne changez pas le numéro d’ordre du stimulus. Cela peut parfois être pratique.

5.8.13 rotate

Il est possible de faire pivoter les images présentées avec la commande “show bitmap”. Un bon exemple est donné dans l’exemple de Mackworth dans la bibliothèque d’expériences PsyToolkit.

L’angle est indiqué en dixième de degrés. Ainsi un angle de 90 degrés est noté 900

Exemple de rotation d’une image

rotate next 900
show bitmap MyBitmap

Exemple de rotation d’une image déjà affichée à l’écran

show bitmap
delay 500
rotate 1 900

5.8.14 delay

L’instruction de delay met le programme en pause pendant le nombre de millisecondes spécifié. Vous aurez souvent besoin de cette fonction, par exemple, si vous souhaitez afficher un stimulus pendant un intervalle de temps spécifique, ou pour attendre entre deux essais.

syntaxe

delay[millisecondes]

Exemmple de pause montrant comment afficher un stimulus pendant 200 ms

show bitmap MyBitmap
delay 200
clear -1

Le paramètre de delay (dans l’exemple 200) peut être une variable ou une entrée de tableau. Regardez bien les exmples pour savoir comment faire.

5.8.15 readkey

L’instruction readkeys demande à l’ordinateur d’attendre un appui touche au clavier. Le premier argument est la touche correcte corresondant aux touches dans l’instruction keys.

syntaxe

readkey[numéro de la touche correcte][temps de réponse maximum]

Dans l’exemple suivant, il y a deux touches possibles dans la tâche (appelée MyTask), la touche a et la touche z. Imaginez qu’un stimulus nécessite d’appuyer sur la touche z, c’est-à-dire la deuxième touche (a étant la première de la ligne “keys”). La commande de readkey sera alors de 3 secondes pour une pression sur la touche. Si les participants appuient sur la touche z, l’ÉTAT sera réglé sur CORRECT (qui est égal à la valeur numérique 1). Si les participants appuient sur la mauvaise touche, celle-ci sera FAUSSE (valeur numérique 2), et s’il n’y a pas de réponse du tout dans un délai de 3000 ms, le code de STATUT sera TIMEOUT (valeur numérique 3).

Exemple avec readkey

task MyTask
  keys a z
  show bitmap PressTheZkey
  readkey 2 3000

Après un appel à readkey, l’utilisateur peut utiliser les variables suivantes :

  • RT (avec le temps de réponse en millisecondes, c’est-à-dire l’heure de l’événement d’appui de la touche)
  • TT (l’heure à laquelle la touche a été libérée)
  • STATUT (avec les valeurs CORRECT, FAUX, ou TIMEOUT, ou 1,2, ou 3)

5.8.16 keystatus

La commande keystatus est réservée à un usage avancé et ne fonctionne que sous Linux (c’est-à-dire pas la version web) Sous certaines conditions, vous souhaitez vérifier directement l’état du clavier. Vous pouvez le faire avec la commande keystatus. Vous pouvez (en option) spécifier quelle touche vous souhaitez que le clavier soit correct.

Exemple avec keystatus

task checkKey
  keys a l
  show rectangle 0 0 50 50   255 0 0
  timestamp MyTime1
  timestamp MyTime2
  while $x < 5000 ## run while-loop for 5 secs
   keystatus ## read the keyboard status
   if KEY == 1 ## key "a"
     unhide 1 ## display the rectangle
   fi
   if KEY == 2 ## key "l"
     hide 1 ## hide the rectangle if l is pressed
   fi
   set $x timestamp-diff MyTime1 MyTime2 # now x should be 500
   nap ## give the computer some rest in the while loop
  while-end

5.8.17 readkeys

La fonction “readkey” est utile pour la plupart des expériences, où il suffit d’appuyer sur une seule touche en réponse à un stimulus. Dans un certain nombre d’expériences, vous pouvez souhaiter que les gens puissent taper un mot (ou une séquence de lettres). La commande readkeys vous permet de le faire. Regardez l’exemple ci-dessous. La commande readkeys comporte de nombreuses options, ce qui peut sembler un peu plus difficile (voir la liste ci-dessous).La commande permet d’effacer un caractère. La touche Retour “termine” la saisie des readkeys. Il y a également un exemple de code dans la leçon (en anglais) sur la mesure des temps de réponses avec readkeys.

Exemple avec readkeys

bitmaps
  apple ## a picture of an apple
  empty_box ## an empty rectangle used as letter placeholder

fonts
  arial 20

task my_task
  text color yellow
  show bitmap apple
  readkeys "apple" 10000
  save RT STATUS

Une fonction plus complexe utilise les options de readkeys.

Notez que, par défaut :

  • les lettres tapées seront affichées à l’écran (vous pouvez les cacher avec l’option readkeys hide)
  • il n’y a pas de places réservées (voir l’exemple ci-dessous pour savoir comment afficher les places réservées)
  • la couleur de la police est blanche par défaut (vous pouvez la définir différemment avec, par exemple, textcolor yellow) *la taille maximale du tableau est de 100 (ce qui est en pratique beaucoup plus long que ce dont vous pourriez avoir besoin)
  • les lettres seront affichées à partir du centre de l’écran
  • la première police définie (dans la section des polices) sera utilisée
  • l’espacement par défaut des lettres sera de 25 pixels

Options de readkeys :

  • readkeys option size number : combien de lettres peuvent être tapées au maximum.
  • readkeys option show : les lettres tapées seront affichées à l’écran (à partir du centre de l’écran)
  • readkeys option show x_position y_position : les lettres tapées seront affichées comme indiqué par la position x/y
  • hide : les lettres tapées ne seront pas affichées à l’écran
  • readkeys option space number : Les lettres seront espacées par ce nombre de pixels
  • readkeys option placeholders image : Il y aura des places réservées sous la forme d’image (telle que définie dans les bitmaps)
  • readkeys option placeholders Width Height : Les places réservées seront des rectangles de taille Largeur par Hauteur

Voici un exemple avec certaines options

bitmaps
  apple ## a picture of an apple
  empty_box ## an empty rectangle used as letter placeholder

fonts
  my_arial arial 20

task my_task
  text color yellow
  show bitmap apple
  text color red
  readkeys option size 5
  readkeys option show 100 50
  readkeys option placeholders empty_box
  readkeys font font1
  readkeys "apple" 10000
  save RT STATUS

Quelques explications sur l’exemple ci-dessus :

  • text color red : La commande readkeys affichera les lettres en rouge
  • option readkeys size 5 : 5 lettres au maximum peuvent être tapées
  • readkeys option placeholders empty_box : L’espace réservé sera l’image bitmap empty_box telle que donnée par l’utilisateur dans la liste des bitmaps
  • readkeys option show 100 50 : les lettres tapées sont affichées à l’écran à la position 100 50.
  • readkeys option font my_arial : La police my_arial sera utilisée

Dans l’exemple ci-dessus, la dernière ligne de readkeys attend pendant 10 000 ms que les personnes aient entré une ou plusieurs lettres (le participant appuyant sur la touche retour/entrée met fin à l’entrée). Si les personnes ont saisi “apple”, leur statut est réglé sur “correct” (c’est-à-dire la valeur 1).

5.8.18 textbox

L’instruction textbox crée une boîte dans laquelle les gens peuvent saisir du texte. Contrairement à l’instruction readkeys, la textbox permet également la saisie de caractères spéciaux (y compris la saisie de texte en chinois, les caractères spéciaux des langues européennes, etc.

Elle a été introduite dans la version 3.4.0 et sera développé ultérieurement. Actuellement, une zone de texte est affichée avec l’instruction textbox new et vous pouvez fournir plusieurs arguments. Voici un exemple dans lequel les arguments suivants sont utilisés : x-position, y-position, width, height, textcolor, background color, font size et font family (comme arial ou times).

task my_task
  show text "Enter words" 0 -280
  show rectangle 300 250 100 100 green
  textbox new 0 0 500 400 white blue 30 arial
  readmouse l 2 99999 range 2 2
  set %%my_list textbox
  save %%my_list

Utilisez set pour enregistrer le texte dans une variable de texte (comme %my_word) ou une liste de texte (comme %%my_list).

5.8.19 readmouse

Pour la version sans clic de readmouse, cela a légèrement changé dans la version 3.1.0

Comme pour la touche de lecture, vous pouvez vérifier si le participant a cliqué sur la touche de la souris et, si oui, si la souris était à l’endroit où elle devait être. Vous pouvez aussi simplement attendre que la souris soit déplacée dans une certaine zone de l’écran. En fait, vous pouvez vérifier si l’emplacement d’un stimulus spécifique a été touché par la souris (bitmap, ou rectangle, ou texte).

Voici les différentes options

  • Attendre que la souris soit cliquée et que la souris soit au bon endroit
  • Attendre que le participant déplace la souris au bon endroit

Dans l’exemple suivant, nous montrons deux rectangles, et nous voulons que le participant passe la souris sur le rectangle vert (le premier bitmap), qui est positionné à gauche (-200). Nous donnons au maximum 5 secondes, c’est-à-dire 5000 millisecondes.

Exemple de readmouse sans cliquer

task checkMouse
  show rectangle -200 0 40 40  0 255 0 # green rect, left
  show rectangle  200 0 40 40  255 0 0 # red rect, right
  readmouse 1 5000
  save STATUS RT
Dans l'exemple ci-dessus, vous obtenez un STATUT correct si le rectangle de gauche a été survolé, et vous obtenez un STATUT incorrect si le rectangle de droite est survolé.  Au cas où il y aurait plus de stimuli à l'écran, il est recommandé d'utiliser le paramètre range, comme indiqué ci-dessous.

Exemple de readmouse sans cliquer et utilisant range

task checkMouse
  show rectangle 0 0 700 500   100 100 100
  show rectangle -200 0 40 40  0 255 0 # green rect, left
  show rectangle  200 0 40 40  255 0 0 # red rect, right
  readmouse 2 5000 range 2 3
  save STATUS RT

Dans l’exemple ci-dessus, le premier rectangle est un rectangle gris qui n’est qu’un fond. Comme ce rectangle est presque aussi grand que l’ensemble de l’écran d’expérimentation, nous devons dire à PsyToolkit que nous ne nous soucions pas du survol de ce stimulus par la souris. Pour ce faire, nous utilisons range dans l’instruction de readmouse. Cela signifie, dans ce cas, qu’il ne faut vérifier que si le stimulus 2 ou le stimulus 3 a été survolé.

Dans l’exemple suivant, nous avons exactement la même tâche, mais nous voulons un clic de souris dans le premier stimulus. Nous ajoutons l’argument “l” représentant le bouton gauche de la souris. En Javascript, il est recommandé de n’utiliser que le bouton gauche de la souris, car le bouton droit peut afficher un menu contextuel dans le navigateur , ce que vous ne souhaitez évidemment pas.

Exemple avec readmouse

task checkMouse
  show rectangle -200 0 40 40  0 255 0 # green rect, left
  show rectangle  200 0 40 40  255 0 0 # red rect, right
  readmouse l 1 5000
  save STATUS RT

Un problème se pose lorsque les stimuli se chevauchent. Imaginez la situation suivante. Vous avez un grand rectangle qui est juste leur pour montrer un rectangle jaune clair, et au dessus de cela, un rectangle beaucoup plus petit. Si vous voulez que les gens cliquent sur ce second rectangle plus petit, vous devez dire à l’ordinateur que vous ne vous souciez pas du premier. La façon de le faire est de spécifier la gamme de bitmaps qui vous intéresse. Voir l’exemple ci-dessous :

Exemple avec readmouse

task checkMouse
  show rectangle -200 0 400 400  255 255 0 # big yellow rectangle
  show rectangle  50 0 40 40  255 0 0 # small red one
  readmouse l 2 5000 range 2 2 # wait for second one being clicked
  save STATUS RT

Enfin, il existe un cas spécial de survol, où vous pouvez demander à readmouse de ne répondre que si la souris survole la cible demandée, et de ne pas répondre par erreur pour tout autre stimulus. Pour cela, il vous suffit d’ajouter l’option find. Exemple de readmouse sans cliquer et utilisant find

task checkMouse
  show rectangle -200 0 40 40  0 255 0 # green rect, left
  show rectangle  200 0 40 40  255 0 0 # red rect, right
  readmouse 1 5000 find
  save STATUS RT

Dans le cas ci-dessus, vous pouvez survoler le rectangle de droite, mais PsyToolkit l’ignorera complètement et ne considérera que le stimulus de gauche. Cela peut être utile dans certaines situations. Par exemple, si vous voulez qu’un participant trouve un objet parmi d’autres. Le participant peut passer le curseur sur tous les objets jusqu’à ce quil ait vu l’objet cible. Vous pouvez bien sûr aussi le faire avec une range, mais cette solution est un raccourci car ici, vous n’avez pas besoin de connaître exactement les numéros du paramètre range, ce qui simplifie les choses.

5.8.20 drag

La fonction drag vous permet de faire glisser un stimulus d’un endroit à un autre. Il existe de nombreuses options pour ce faire. Souvent, il est plus facile de regarder d’abord un exemple simple. Le mieux est de lire la leçon sur drag pour des exemples détaillés.

Vous trouverez ci-dessous des exemples simples, mais d’abord un aperçu. Notez que les valeurs en italique doivent être remplacées par les numéros des variables. Les valeurs entre crochets sont des options différentes. Plus de détails plus bas.

Aperçu de drag

drag option from [*&&array* or *sequence*]
drag option to [*&&array* or *sequence*]
drag option snap ([left|center|right][top|center|bottom][no_overlap *&&array* or *sequence*])
drag option *xlim value value*
drag option *ylim value value*
drag *maximum_duration*

Dans sa forme la plus simple possible, vous pouvez avoir un exemple comme celui-ci. Notez que vous devrez toujours fournir des lignes drag option pour indiquer à PsyToolkit quel stimulus doit être déplacé.

Dans cet exemple, vous montrez un stimulus (stimulus numéro 1) en jaune (le jaune est RGB : 255 255 0). Vous dites à PsyToolkit que le stimulus qui peut être glissé de quelque part est dans ce cas le stimulus numéro 1. Vous donnez jusqu’à 60 000 millisecondes (c’est-à-dire 60 secondes) pour le déplacement.

Exemple super simple et fonctionnel de déplacement

task my_drag
  show rectangle 0 0 100 100   255 255 0
  drag option from 1
  drag 99999

block test
  tasklist
     my_drag 1
  end

Il y a d’autres ptions. Par exemple, avec PsyToolkit vous pouvez avoir plusieurs de stimuli qui peuvent être déplacés. Dans *drag option from" vous pouvez spécifier plusieurs stimuli ou même une liste, comme dans l’exemple ci-dessous.

Vous pouvez faire glisser le rouge et le vert, mais pas le rectangle blanc

task my_drag
  show rectangle -100 0 100 100   255 0 0      # red
  show rectangle    0 0 100 100     0 255 0    # green
  show rectangle  100 0 100 100   255 255 255  # white
  drag option from 1 2
  drag 99999

block test
  tasklist
     my_drag 1
  end

L’instruction drag permet de spécifier la ou les valeurs d’un ou de plusieurs stimuli. Dans sa forme la plus simple, vous pouvez avoir un exemple tel que celui-ci :

Faites glisser le rouge sur le rectangle vert

task my_drag
  show rectangle  100 0 120 120     0 255 0    # green
  show rectangle -100 0 100 100     255 0 0      # red
  drag option from 2
  drag option to 1
  drag 99999
  show text "Now wait 1000 ms" 0 150
  delay 1000

block test
  tasklist
     my_drag 1
  end

Dans l’exemple ci-dessus, vous auriez pu ajouter drag option snap pour que le rectangle rouge s’accroche exactement sur le rectangle vert. Vous pouvez même spécifier la manière dont vous souhaitez que l’accrochage se fasse, voici quelques exemples :

exemples d’accrochage par glisser-déposer

drag option snap # par défaut, l'accroche se fait au centre du rectangle
drag option snap center center # même chose, mais en indiquant explicitement l'alignement horizontal et vertical de l'accrochage
drag option snap left center # cet alignement est horizontal à gauche mais vertical au centre.

Plus d’informations sur les variables liées à l’instruction ici.

5.8.21 dragging

La fonction dragging permet à votre participant de continuer à faire glisser les stimuli sur l’écran jusqu’à ce qu’il ait terminé. Lorsqu’il a terminé (mais avant le temps de réponse maximal), il doit appuyer sur le bouton de sortie. Pour cela, vous pouvez spécifier un stimulus spécifique.

Toutes les options de drag peuvent également être utilisées avec dragging, mais il existe une option supplémentaire.

Aperçu de dragging

drag option exit *stimulus*
dragging *maximum_duration*

Dans l’exemple ci-dessous, deux rectangles rouges et deux rectangles verts sont représentés. Un cinquième rectangle jaune (sur lequel figure le texte “Exit”) fait office de bouton de sortie. Vous devez faire glisser les rectangles rouges sur les rectangles verts.

Notez que si vous ne les faites pas glisser sur les cibles, ils reviennent à leur position initiale.

Exemple super simple et fonctionnel de dragging

task my_dragging
  show rectangle  100 -100 120 120     0 255 0    # green
  show rectangle  100  100 120 120     0 255 0    # green
  show rectangle -100 -100 100 100     255 0 0    # red
  show rectangle -100  100 100 100     255 0 0    # red
  show rectangle 250 0 100 80   255 255 0
  show text "Exit" 250 0   0 0 0
  drag option from 3 4
  drag option to 1 2
  drag option snap center center
  drag option exit 5
  dragging 60000
  save RT

block test
  tasklist
    my_dragging 1
  end

Plus d’informations sur les variables liées l’instruction dragging ici.

5.8.22 variables utilisées avec drag et dragging

Les variables suivantes peuvent être utilisées pour accéder aux informations relatives aux actions de glisser-déposer. Vous n’en avez pas nécessairement besoin.

Vue d’ensemble

DRAGGED the stimulus that was being dragged
DRAGGED_ON the stimulus that it was move on (only with "drag option to")
DRAG_CHANGED if a stimulus had been moved at all (1 if changed, 0 if not)
DRAG_OLD_X the stimulus X coordinate when drag started
DRAG_OLD_Y the stimulus Y coordinate when drag started
DRAG_X the stimulus X coordinate of (last) dragged stimulus
DRAG_Y the stimulus Y coordinate of (last) dragged stimulus

DRAGGED contains the number of the stimulus a participant dragged. This is interesting when a participant can choose to drag one out of multiple stimuli.

DRAGGED_ON contient le numéro du stimulus sur lequel le participant a glissé.

DRAGGED_CHANGED Contient 1 si le participant a traîné un stimulus, et 0 si rien n’a été traîné.

DRAG_OLD_X Si un stimulus a été traîné, sa position X précédente avant le début du traînage.

DRAG_OLD_Y Si un stimulus a été déplacé, sa position Y précédente avant le début du déplacement.

DRAG_X Si un stimulus a été traîné, sa position X actuelle.

DRAG_Y Si un stimulus a été traîné, sa position actuelle en Y.

Les expériences utilisant drag ou dragging peuvent être assez complexes. Apprenez à les écrire dans la section leçons.

5.8.23 progress

PsyToolkit peut afficher une barre de progression. Cela peut être utile si vous voulez dire aux gens combien d’essais ont été effectués et combien de temps il faudra pour les terminer.

Les barres de progression peuvent distraire. Si vous faites une expérience sur l’attention visuelle ou la mémoire, vous devez vous demander si vous pensez que le fait de regarder la barre de progression peut interférer avec le processus cognitif que vous étudiez. En fait, il est très facile de le montrer. Il existe un certain nombre d’options pour colorer et former la barre de progression comme vous le souhaitez, mais la valeur par défaut est une simple barre de progression horizontale étroite en haut de l’écran.

La commande est simple : show progressbar done todo

Le premier chiffre correspond aux essais réalisés jusqu’à présent et le second au nombre total d’essais que le participant devra réaliser.

Dans l’exemple ci-dessous, la commande show progress affiche la barre de progression. Elle est suivie par TRIALCOUNT (essais effectués jusqu’à présent) et le nombre total d’essais (ici par exemple 30).

Exemple de barre de progression

task exampletask
  show progress TRIALCOUNT 30
  delay 1000
  show mystimulus

Il existe un ensemble d’options sécifiques que vous pouvez définir dans le cadre de votre tâche (et non dans la section des options). Vous trouverez ci-dessous un exemple dans lequel vous pouvez définir les deux couleurs (une pour la couleur des essais effectués et une pour la couleur de fond, par défaut ce sont le vert et le gris, respectivement).

Exemple de barre de progression avec options

task exampletask
  progress option size 0 290 600 10
  progress option color1 255 255 0
  progress option color2 128 128 128
  progress option between 5
  show progress TRIALCOUNT 30
  delay 1000
  show mystimulus

Ces options ont la signification suivante.

  • size : position X (milieu de la barre de progression), position Y, largeur, hauteur
  • color1 : La couleur des essais réalisés (en format Rouge/Vert/Bleu)
  • color2 : La couleur des essais réalisés (en format Rouge/Vert/Bleu)
  • between : L’espace entre les essais (par exemple, choisir 2 pour un petit écart entre chaque point d’avancement)

Notez qu’au lieu de color1 et de color2, vous pouvez aussi simplement écrire :

Exemple de barre de progression avec options

progress option colors 255 255 0    128 128 128

5.8.24 choose

Dans certaines circonstances, vous souhaitez demander au participant de cliquer sur plusieurs stimuli à l’écran. Idéalement, vous voudriez permettre au participant de sélectionner des objets et de les désélectionner également. Tout cela est possible avec la fonction “choisir”.

En bref, la fonction choose permet au participant de cliquer sur une série de stimuli, d’afficher un symbole au-dessus des stimuli, et lorsqu’il clique à nouveau, le symbole disparaît.

Il est plus facile d’apprendre comment cela fonctionne à partir d’un exemple.

Dans l’exemple suivant, il y a trois symboles affichés à l’écran qui peuvent être sélectionnés avec un sélecteur bitmap. Les options de cette commande peuvent être définies avant que la commande choose ne soit appelée avec l’option choose. Le participant dispose de 60 secondes (60 000 millisecondes).

Exemple de choix

bitmaps
  markingsymbol
  house
  ball
  car
  exitsymbol1 ## shown when at least 2 selected
  exitsymbol2 ## shown when not enough are selected

task clickMysymbols
  show bitmap house # bitmap 1
  show bitmap ball  # bitmap 2
  show bitmap car   # bitmap 3
  choose option select markingsymbol
  choose option minselect 2
  choose option exit exitsymbol1 exitsymbol2 350 250
  choose 60000 1 3
  save RT CHOSEN_N CHOSEN_1 CHOSEN_2 CHOSEN_3

Notez les éléments suivants à propos de l’exemple ci-dessus :

  • Il y a trois images sur l’écran.
  • Si vous cliquez sur une image, l’image “markingsymbol” sera placée sur celle-ci.
  • Si vous cliquez à nouveau, ce “markingsymbol” sera supprimé
  • Le RT est le temps de réponse jusqu’à ce que le symbole de sortie ait été cliqué
  • CHOSEN_N contient le nombre d’objets sélectionnés
  • CHOSEN_1, CHOSEN_2, CHOSEN_3, etc. contient le numéro de l’objet. Ils seront toujours dans l’ordre numérique.

Il existe plusieurs autres options :

  • choose option minselect : Le nombre minimum d’objets à sélectionner
  • choose option maxselect : Les objets maxumum à sélectionner
  • choose option sprites : choisir parmi les sprites au lieu des stimuli statiques
  • choose option keep: Garde les images du sélecteur sélectionné par le participant à l’écran (par défaut, elles sont effacées immédiatement lorsque la fonction de choix est terminée)

La commande choose est particulièrement utile pour les tâches de mémoire.

5.8.25 rate

Parfois, les gens veulent une échelle de Likert dans leur expérience. Par exemple, vous pouvez montrer un article de shopping et demander aux gens quelle est la probabilité que vous l’achetiez la semaine suivante sur une échelle de un à cinq. C’est maintenant super facile à faire.

Exemple super simple d’utilisation de rate

bitmaps
  something_for_sale

task wantit
  show bitmap something_for_sale -200 0
  rate 10000 5
  save RATE RATE_RT RATE_STATUS

Cela vous donne le type d’échelle de Likert le plus élémentaire. Par défaut, les points de l’échelle de Likert sont des cercles jaunes et à gauche et à droite, vous voyez une petite boîte blanche. En réalité, vous voulez beaucoup plus. Pour cela, vous pouvez utiliser des options. Tout d’abord, vous pouvez sélectionner un lieu avec l’option pos suivie de coordonnées x et y.

Dans l’exemple ci-dessous, l’échelle est maintenant indiquée à gauche du centre.

Exemple simple de rate

bitmaps
  something_for_sale

task wantit
  show bitmap something_for_sale -200 0
  rate option pos -200 0
  rate 10000 5
  save RATE RATE_RT RATE_STATUS

Dans l’exemple ci-dessous, nous ajoutons de plus belles images (bitmaps) au lieu des symboles par défaut. Dans PsyToolkit, il y a l’option “labels” pour rate, de sorte que vous pouvez faire une image avec les textes “pas du tout” et “beaucoup” ou juste de simples flèches comme dans l’exemple ci-dessous. L’option items spécifie simplement l’image des points cliquables sur l’échelle.

De plus, dans l’exemple ci-dessous, nous avons 7 éléments et les personnes doivent faire un choix dans les 5 secondes.

Exemple simple de rate

bitmaps
  something_for_sale
  left_arrow
  right_arrow
  my_rectangle

task wantit
  show bitmap something_for_sale -200 0
  rate option pos -200 0
  rate option labels left_arrow right_arrow
  rate option items my_rectangle
  rate 5000 7
  save RATE RATE_RT RATE_STATUS

5.8.26 save

Sauvegarde des variables. En général, une tâche se termine par une ligne de sauvegarde.

L’instruction de sauvegarde est d’une importance capitale, car elle garantit que les informations dont vous avez besoin pour votre analyse des données sont stockées. Par défaut, PsyToolkit ne conserve aucune information (contrairement à certains autres logiciels d’expérimentation). L’utilisateur doit indiquer au PsyToolkit quelles informations sont stockées dans le fichier de données. En général, vous voudrez enregistrer l’état actuel, le bloc actuel (si vous avez plus d’un bloc), et au moins le temps de réponse (RT), et si le participant a répondu correctement ou non (STATUS). Les exemples présentés sur ce site web peuvent vous aider à comprendre cela. Le meilleur endroit pour la commande de sauvegarde est à la fin de la description de votre tâche.

Syntaxe

save[liste de variables]

Exemple pour save

save BLOCKNAME RT STATUS

5.8.27 sound

Utilisé pour jouer des sons. Un son commence juste à jouer, le code continue. Si vous ne voulez rien faire pendant le son, vous devez le faire suivre d’un délai. Vous pouvez également arrêter le son à tout moment en utilisant l’instruction silence.

Syntaxe


sound [sound name (as defined in 'sounds']

Exemple pour sound

sound MySoundFile
delay 200
silence MySoundFile

5.8.28 if

Vous pouvez utiliser if pour exécuter seulement quelques commandes. Cela est souvent nécessaire pour afficher un feedback si les gens font une erreur. Le contraire de if est fi. fi sert à clore la liste de commandes conditionnelles

exemple avec if

task MyTask
  show bitmap stimulus
  readkey 1 1000
  if STATUS == CORRECT
    show bitmap WellDone
    delay 1000
    clear -1
  fi
  if STATUS != CORRECT
    show bitmap Mistake
    delay 2000
    clear -1
  fi
  if $x == &y
    show bitmap SmileyFace $x $y
  fi

Exemples de if avec else

task MyTask
  show bitmap stimulus
  readkey 1 1000
  if STATUS == CORRECT
    show bitmap WellDone
    delay 1000
    clear -1
  else
    show bitmap Mistake
    delay 2000
    clear -1
  fi
  if $x == &y
    show bitmap SmileyFace $x $y
  fi

L’instruction else doit être sur sa propre ligne. Avec if, vous pouvez également comparer deux listes

Exemples de if avec des listes

task MyTask
  set &a 1 2 3 4
  set &b 1 2 3 4
  if &&a == &&b
    show text "Arrays a and b are exactly the same"
  else
    show text "Arrays a and b are different"
  fi

5.8.29 while

Comme pour if, vous pouvez mettre le code dans une boucle while. La boucle while se termine par la déclaration “while-end”.

Tout ce qui se trouve entre while et while-end sera exécuté jusqu’à ce que la condition de la ligne while soit satisfaite.

Exemple de boucle while

task MyTask
  set $mycounter 0
  while $mycounter < 10
    set $x random -200 200
    set $y random -200 200
    show bitmap SmileyFace $x $y
    set $mycounter increase
  while-end

Si vous faites une erreur, l’ordinateur peut être bloqué dans la boucle while. Par exemple, si vous n’augmentez pas la valeur de $mycounter dans l’exemple ci-dessus, le code sera bloqué et continuera à dessiner de nouveaux Smileys sur des localisations aléatoires.

5.9 Instructions moins souvent utilisées {#s5-9}

Certaines fonctions sont rarement utilisées ou nécessaires, mais elles ajoutent au potentiel des scripts du PsyToolkit.

5.9.1 font

Vous pouvez définir la police de l’instruction show text.

Exemple d’usage de font

fonts
  MySmallFont arial.ttf 20
  MyBigFont arial.ttf 50

task Mytask
  font MySmallFont
  show text "small" 0 0
  font MyBigFont
  show text "small" 0 100

5.10 Fonctions avancées

5.10.1 end

Vous pouvez terminer la tâche à n’importe quel moment de votre liste de d’actions dans une tâche. Vous pouvez même mettre fin à la liste de tâches en cours ou à l’ensemble de l’expérience. Il vous suffit de d’ajouter end à la tâche, à la liste de tâches ou à l’expérience. Cela peut être utile, par exemple, lorsque les gens sont en formation et que vous voulez arrêter le blocage des procès lorsqu’ils ont fait une erreur. Il s’agit toutefois d’une déclaration dont vous aurez rarement besoin.

5.10.2 timestamp

L’horodatage (timestamp) peut être utilisé pour saisir l’heure actuelle. Cela peut être pratique si vous vérifiez l’heure passée dans une boucle while. Cela peut également être pratique si vous essayez de déboguer du code et de vérifier si le timing est conforme à ce qui est attendu.

Vous pouvez obtenir le timestamp-diff entre deux variables de timestamp en utilisant la commande set comme dans l’exemple ci-dessous. Les horodatages ne sont pas directement accessibles ou utilisables autrement que par la commande set timestamp-diff

Exemples de timestamp

task MyTask
  timestamp MyFirstTimestamp
  delay 1000
  timestamp MySecondTimestamp
  set $x timestamp-diff MyFirstTimestamp MySecondTimestamp
  save $x

5.10.3 sprite

Dans PsyToolkit, les sprites sont un type de stimulus distinct (en plus de l’image bitmap, du rectangle, du cercle et du texte. Les sprites peuvent se déplacer et tourner. C’est idéal pour les expériences telles que le suivi d’objets multiples. Ils ont leurs propres commandes.

Exemple basique montrant un sprite en mouvement

bitmaps
  mystimulus

task MyTask
  sprite create mystimulus
  sprite 1 display
  sprite move direction 45 5
  delay 2000

block test
  tasklust
    MyTask 1
  end
  

La vitesse des sprites en mouvement est basée sur différents facteurs. La vitesse dépend de la fréquence de mise à jour de l’écran. Cela signifie simplement que si vous utilisez des expériences sur différents systèmes, vous pourriez avoir des vitesses des sprites en mouvement légèrement différentes. Consultez les exemples du package Linux pour voir comment les commandes ci-dessous fonctionnent.

Nom de la fonction Ce que cela fait Exemple
**Créer un sprite* *
sprite create [bitmap] Crée un stimulus au centre l’écran sprite create MyStimulus
sprite create [bitmap] [x][y] Crée un stimulus et le positionne sprite create MyStimulus 100 50
sprite create [bitmap] [x][y][angle][speed] Crée un stimulus, le positionne et le bouge sprite create MyStimulus 100 50 45 5
Afficher les sprites
sprite [sprite] display Rend le sprite 1 visible sprite 1 display
sprite [sprite] hide Cache le sprite 1 sprite 1 hide
sprite [sprite] freeze Stoppe le mouvement sprite 1 freeze
sprite [sprite] move remet en mouvement sprite 1 move
déplacer les sprites
sprite [sprite] jump (xpos)(ypos) Change de position une fois sprite 1 jump 200 100
sprite [sprite] move (to/towards) (xpos)(ypos)(speed) Définit une direction sprite 1 move to 200 100 5
sprite [sprite] move direction (angle)(speed) Bouge dans une direction sprite 1 move direction -90 4
sprite [sprite] move path (speed) x1 y1 … xn yn Bouge le long d’un ensemble de localisations sprite 1 move path 3 200 100 -200 100 300 50
sprite [sprite] evade Les sprites ne se croiseront pas sprite 1 evade
sprite [sprite] borders [left][right][top][bottom] Le sprite se heurtera à ces frontières fixes sprite 1 borders -300 300 -200 200
rotation/défilement des sprites
sprite [sprite] rotate [speed in degrees per refresh rate] Faire tourner un sprite en continu sprite 1 rotate -7
sprite [sprite] rotate to [angle] [speed in degrees per refresh rate] Faire tourner un sprite progressivement sprite 1 rotate to 270
sprite [sprite] rotate now [angle] Faire tourner un sprite sprite 1 rotate now 45
sprite [sprite] hscroll [speed] Faites défiler un sprite sprite 1 hscroll -3
Changer les sprites
sprite [sprite] speed (speed) vitesse fixée sprite 1 speed 2
sprite [sprite] accelerate (speed change) ajuste la vitesse sprite 1 accelerate 3
sprite [sprite] bitmap [bitmapname] changer l’apparence sprite 1 bitmap smiley
commandes sur tous les sprites à la fois
sprites [options] all agir sur tous les sprites en une seule ligne sprites display all

5.11 Instructions pour les équipements spéciaux

Les équipements spéciaux sont principalement les cartes d’entrée/sortie et les claviers spéciaux. Je recommande les claviers Cedrus. Si vous le souhaitez, vous pouvez construire votre propre clavier. Cela permet d’économiser beaucoup d’argent. Vous pouvez le brancher sur le port parallèle (si vous en avez un). Ce clavier est appelé “ultra” (conçu par Felix Frey, Université de Leipzig), et un document expliquant comment le construire est disponible gratuitement.

5.11.1 cedrus readkey

Attendre une touche spécifique de votre clavier USB Cedrus. Assurez-vous que vous savez quelle touche a quelle valeur numérique (vous pourriez vouloir faire quelques expériences à ce sujet, et il existe un exemple de programmation qui vous montre le numéro de chaque touche). Sous Linux, vous pouvez appeler cela en utilisant la commande “testcedrus”, qui est fournie avec PsyToolkit.

5.12 table

Les tables ont des lignes et des colonnes. Chaque fois qu’une table est utilisée dans une tâche, une de ses lignes est choisie. Chaque colonne peut être référencée en utilisant le signe @. Par exemple, (???) fait référence à la deuxième colonne de la ligne qui est choisie pour un essai de tâche donné. Dans le bloc, l’utilisateur peut spécifier comment les lignes du tableau sont sélectionnées. La sélection par défaut est aléatoire, mais il existe d’autres moyens (par exemple : ordre fixe, répétition sur un essai).

Exemple de table

table MyTable
 10  2  bitmap1
-10  1  bitmap2

Exemple de table avec des chaines de caractères

table MyTable
 10  2  bitmap1  "condition one"
-10  1  bitmap2  "condition two"

Dans une tâche qui utilise un tableau (avec l’instruction table), chaque colonne peut être référencée avec le signe @. Ainsi, @2 renvoie à la deuxième colonne de la ligne du tableau qui a été sélectionnée.

Chaque fois qu’une tâche est exécutée, une seule ligne du tableau associé est sélectionnée. Par défaut, une ligne est choisie au hasard. Il existe d’autres façons de choisir des lignes de tableau (en utilisant l’instruction tasklist dans les blocs).

Dans chaque essai de tâche avec un tableau, vous avez non seulement accès aux colonnes, mais vous pouvez également obtenir le numéro de la ligne de la table. La variable est appelée TABLEROW. Cela peut être pratique pour sauvegarder des données. S’il y a beaucoup de données importantes dans chaque tableau que vous voulez les utiliser dans votre analyse, vous pouvez ainsi vous assurer quel ligne a été utilisée.

5.13 block

Dans les expériences, les essais se font par blocs. Un bloc d’essais signifie que le participant effectue, par exemple, 100 essais de la tâche Stroop. Vous pouvez aussi faire une pause au milieu, et créer deux blocs de 50 essais à la place. Les blocs appellent des tâches, donc vous devez vraiment avoir au moins un bloc dans votre script PsyToolkit. Les blocs peuvent être complexes, mais ils peuvent aussi être très simples, comme cet exemple ci-dessous.

Exemple de bloc simple, appelant la tâche stroop 100 fois

block MyBlock
  tasklist
    strooptask 100
  end

5.13.1 bitmap

L’instruction bitmap est simple. Vous voulez souvent afficher une image avec une instruction et attendre qu’on appuie sur une touche.

Example de bitmap dans un bloc

block Myblock
  bitmap MyInstruction
  wait_for_key
  tasklist
    strooptask 100
  end

L’affichage d’un bitmap dans une tâche et dans un bloc sont différents. Ici, dans les blocs, il ne faut pas mettre le mot “show” avant le bitmap. Dans les tâches, vous devez le faire. Il y a de bonnes raisons à cette distinction (dans les tâches, les stimuli sont rapides, alors que dans les blocs, ils sont considérés comme des instructions).

5.13.2 sound

Comme dans la tâche, vous pouvez démarrer un son avec sound et l’arrêter avec silence

Exemple avec sound dans un bloc

block Myblock
  sound welcometune
  bitmap MyInstruction
  wait_for_key
  silence welcometune
  tasklist
    strooptask 100
  end

5.13.3 delay

Comme pour les tâches, vous pouvez introduire une pause delay. Parfois, c’est bien pour les comptes à rebours.

Exemple avec delay dans un bloc

block Myblock
  bitmap number3
  delay 500
  bitmap number2
  delay 500
  bitmap number1
  delay 500
  tasklist
    mytask 100
  end

5.13.4 message

Au lieu d’afficher un image (bitmap) et d’attendre un appui-touche, vous pouvez combiner tout cela en une seule commande, appelée message.

Exemple de message dans un bloc (en attente de la barre d’espacement, qui est la touche par défaut)

block Myblock
  message MyInstruction
  tasklist
    strooptask 100
  end
  message ThankYouBitmap

Exemple de message en bloc (exemple en attente de la touche “b”)

block Myblock
  message MyInstruction b
  tasklist
    strooptask 100
  end
  message ThankYouBitmap

Vous pouvez utiliser la touche de la souris au lieu du clavier. Veillez à ce que cela soit clairement indiqué dans le message. Le participant poursuivra ensuite en cliquant (ou en touchant) n’importe où sur l’image bitmap de l’instruction.

Exemple de message en bloc (exemple d’attente d’une pression sur le bouton de la souris au lieu du clavier)

block Myblock
  message MyInstruction mouse
  tasklist
    strooptask 100
  end
  message ThankYouBitmap

5.13.5 pager

Parfois, vous voulez une série d’instructions et vous laissez l’utilisateur les parcourir. En d’autres termes, vous avez une série d’images (ou “pages”, d’où le mot “pager”) que vous voulez montrer les unes après les autres. La commande pager vous permet de faire exactement cela.

  • L’utilisateur peut utiliser les touches fléchées et utiliser la touche Q pour s’en sortir. La barre d’espacement permet de passer à l’image/page suivante. Assurez-vous que toutes ces images se trouvent dans la section bitmap.
  • Vous pouvez également utiliser la souris au lieu du clavier (ci-dessous).Veillez à indiquer dans les instructions la façon dont les utilisateurs naviguent dans l’image et comment ils en sortent.

Exemple de pager dans un bloc

block Myblock
  pager MyInstruction1 MyInstruction2 MyInstruction3 MyInstruction4
  tasklist
    strooptask 100
  end

Vous pouvez également utiliser la souris (ou le toucher) pour faire défiler les pages d’instructions. Pour cela, vous devez donner quelques informations supplémentaires. Si vous êtes débutant, essayez d’abord les pagers de base comme expliqué ci-dessus.

Le pager souris/tactile est parfois plus utile (par exemple, les expériences sur l’écran tactile). Dans l’exemple ci-dessous, nous utilisons l’option “pager” pour dire à l’ordinateur ce qui suit :

utilisez la souris avec pager L’image nommée “back” devra être présentée à la position -200 200 L’image nommée “next” devra être présentée à la position 0,200 L’image nommée “start” devra être présentée à la position 200 200

Ainsi, outre les instructions, chaque écran comporte 3 images, une pour revenir en arrière, une pour avancer et une pour quitter les instructions. Cette dernière n’est affichée qu’une fois que le participant les a toutes parcourues. Notez que pour cette expérience, vous devez disposer de bitmaps pour les images : back, next, start, MonInstruction1, MonInstruction2, MonInstruction3.

Exemple avec pager utilisant la souris dans un bloc

block Myblock
  pager option mouse back -200 200 next 0 200 start 200 200
  pager MyInstruction1 MyInstruction2 MyInstruction3
  tasklist
    strooptask 100
  end

5.13.6 Paramétrer les variables

Parfois, vous souhaitez définir une variable globale. Vous pouvez le faire tout comme vous le feriez dans les tâches. Par exemple, vous pouvez fixer le temps de réponse maximum à une valeur plus élevée pendant la formation.

Exemple de paramétrage d’une variable dans un bloc

block MyTraining
  pager MyInstruction1 MyInstruction2 MyInstruction3 MyInstruction4
  set &MaxResponseTime 2000
  tasklist
    strooptask 20
  end

block MyRealDatablock
  set &MaxResponseTime 1000
  pager MyInstruction1 MyInstruction2 MyInstruction3 MyInstruction4
  tasklist
    strooptask 100
  end

5.13.7 tasklist

Chaque bloc comporte une liste de tâches. Celle-ci décrit les tâches qui sont appelées, combien de fois et dans quel ordre. Vous pouvez avoir une ou plusieurs tâches. Il est rare d’avoir plusieurs tâches, mais cela peut être le cas dans les paradigmes de commutation de tâches. Sur chaque ligne de la liste des tâches, vous devez au moins indiquer le nom de la tâche et le nombre d’essais.

Exemple simple de tasklist

block MyTraining
  tasklist
    strooptask 20
  end

Vous pouvez spécifier que vous voulez que chaque fois que les gens font une erreur, le même processus doit être répété, en utilisant repeat_on_error. Si vous utilisez cette méthode, vous devez préciser ce qui est considéré comme une erreur en utilisant la déclaration d’erreur (voir l’exemple ci-dessous).

Repeat_on_error ne fonctionne que lorsque vous utilisez des tableaux, les variables aléatoires ne sont pas fixées aux mêmes valeurs.

Exemple simple de tasklist

table MyTable
  "condition1" 255 0 0 1 ## respond with "r" to red rectangle
  "condition2" 0 255 0 2 ## respond with "g" to green rectangle

task Mytask
  table MyTable
  keys r g
  show rectangle 0 0 50 50   @2 @3 @4
  readkey @5 2000
  if STATUS == WRONG
    error ## this makes this trial an error for the repeat_on_error process
  fi
  save @1 STATUS RT

block MyTraining
  tasklist
    Mytask 10 repeat_on_error
  end

Dans l’exemple ci-dessus, vous voyez un rectangle rouge ou vert (présenté à la position 0,0, qui est le centre de l’écran, et 50px de large et 50px de haut). Vous devez répondre avec la touche “r” ou “g”. Vous vous demandez peut-être pourquoi vous devez spécifier explicitement ce qu’est une erreur si vous utilisez repeat_on_error. C’est une bonne question, car dans l’exemple ci-dessus, c’est effectivement une erreur si la personne répond avec la mauvaise touche. Mais il y a des expériences dans lesquelles vous voulez en fait que les gens ne répondent pas (c’est-à-dire que la valeur de STATUT est TIMEOUT). Et dans certaines expériences, il y a plus d’une réponse par essai. repeat_on_error vous donne un contrôle total sur ce qu’est une erreur et ce qu’elle n’est pas. Dans certaines expériences, vous pouvez souhaiter que tous les participants effectuent les essais exactement dans le même ordre. Vous pouvez simplement parcourir chaque ligne de votre tableau des tâches. Pour cela, vous utilisez l’option fixed.

Exemple simple de tasklist

block MyTraining
  tasklist
    strooptask 20 fixed
  end

Dans certaines expériences, vous pouvez souhaiter que les participants fassent au moins un certain nombre d’essais corrects. Pour cela, vous utilisez l’option correct. Dans l’exemple ci-dessous, le participant doit avoir fait 10 essais corrects, mais après 100 essais, il s’arrêtera, quel que soit le nombre d’essais corrects. Dans la variante allcorrect, les essais doivent être consécutivement corrects.

Exemple simple de tasklist

block MyTraining
  tasklist
    strooptask 10 correct 100
  end

block MyTraining
  tasklist
    strooptask 10 allcorrect 100
  end

Enfin, vous voulez parfois que les essais ne se répètent jamais. Il y a trois façons d’obtenir cela dans l’instruction tasklist

  • all_before_repeat : faire tous les essais comme dans le tableau, choisis au hasard, mais les faire tous avant de les choisir à nouveau
  • no_repeat : ne jamais répéter immédiatement un essai du tableau (c’est-à-dire que la même ligne d’un tableau ne sera pas répétée lors du prochain essai)
  • fixed : faire les essais dans l’ordre où ils se trouvent dans le tableau

Dans l’exemple suivant, il n’y a que trois entrées sur la liste proposée. Elles ne seront pas répétées tant qu’elles ne seront pas toutes terminées. Vous pouvez ajouter explicitement que vous ne voulez jamais les répéter.

Exemple de tasklist

table MyTable
  bitmapBlue
  bitmapRed
  bitmapGreen

task strooptask
  table MyTable
  keys space
  show bitmap @1
  readkey 1

block MyTraining
  tasklist
    strooptask 10 all_before_repeat no_repeat
  end

Si vous avez fixé des blocs consécutifs, mais que vous utilisez la même tâche et le même tableau, vous continuerez à partir de la ligne du tableau d’où vous étiez parti. C’est une fonction pratique au cas où vous voudriez passer par de nombreuses essais, mais où les gens ont parfois besoin d’une pause. Assurez-vous que vous avez toujours une instruction end à la fin de votre liste de tâches

5.13.7.1 maxtime

Vous pouvez fixer la durée maximale d’un bloc (en millisecondes, secondes ou minutes). C’est très simple. Voici un exemple d’un bloc qui peut durer au maximum 2 minutes. Vous pouvez avoir des instructions avant la liste des tâches (par exemple, message ou pager, elles ne sont pas prises en compte dans le temps maximum).

Exemple de bloc avec maxtime de 2 minutes (notez le m)

block MyTraining
  maxtime 2m
  tasklist
    strooptask 10 all_before_repeat no_repeat
  end

Exemple de bloc avec maxtime de 100 s (notez le s)

block MyTraining
  maxtime 100s
  tasklist
    strooptask 10 all_before_repeat no_repeat
  end

Exemple de bloc avec maxtime, avec des variables que vous devez spécifier en millisecondes

block MyTraining
  maxtime &MyVariable
  tasklist
    strooptask 10 all_before_repeat no_repeat
  end

5.13.7.2 feedback

Le feedback peut être utilisé pour créer un retour d’information au participant, par exemple sur la vitesse moyenne de réponse. La création d’un feedback fait partie de la structure “bloc”. Le retour d’information est décrit dans un document distinct, en raison de son utilisation avancée : [comment utiliser le feedback] (https://www.psytoolkit.org/doc3.4.0/feedback.html)

5.13.8 blockorder

Par défaut, les blocs sont effectués dans l’ordre où ils sont décrits dans votre code. Vous pouvez modifier cet ordre en réorganisant le code du bloc, mais il existe un moyen plus simple et plus rapide : l’instruction blockorder. En utilisant blockorder, vous pouvez lister les blocs que vous voulez faire et l’ordre dans lequel vous voulez les faire.

L’idée derrière cette fonction est simplement la rapidité du codage, et la facilité pour changer l’ordre (par exemple pour le contreblancement). Dans l’exemple suivant, imaginez qu’il existe un code pour trois blocs, appelés formation, test1 et test2. L’exemple suivant montre comment définir l’ordre de ces blocs de différentes manières.

Exemple d’utilisation de blockorder

blockorder
  training
  test1
  test2

Plus important encore, vous pouvez avoir plus d’un blockorder. Lorsque vous avez plus d’un blockorder, PsyToolkit en choisira un au hasard. Le blockorder choisi sera stocké dans la variable BLOCKORDER. Par défaut, cette variable contient la valeur 1, mais si vous avez donné, par exemple, 3 blockorder, cette valeur peut être comprise entre les valeurs 1 et 3. Vous trouverez ci-dessous un exemple de cette utilisation.

Dans l’exemple ci-dessous, l’ordinateur choisira l’un des deux blockorder au hasard. C’est ce que l’ordinateur fera lorsqu’il verra deux blockorder. C’est très utile pour faire un contrebalancement, par exemple si vous voulez que certains participants commencent avec une tâche et d’autres avec l’autre.

Exemple d’utilisation du blockorder (notez que ces tâches ne font rien de significatif)

task color_task
  keys a l
  readkey 1 1000
  readkey
  save BLOCKORDER BLOCKNAME TASKNAME RT

task shape_task
  keys a l
  readkey 1 1000
  readkey
  save BLOCKORDER BLOCKNAME TASKNAME RT

blockorder
  training
  color_task
  shape_task

blockorder
  training
  shape_task
  color_task

5.13.9 include (usage avancé seulement)

Vous pouvez inclure un autre fichier dans votre script. Cela peut être utile si vous travaillez avec de très grands tableaux que vous voulez stocker dans un fichier séparé. Toute ligne commençant par “include” suivie d’un nom de fichier utilisera ce nom de fichier à cet endroit du script. Les fichiers inclus doivent se trouver dans le même répertoire que le fichier principal du script utilisant include.

5.13.10 part (pour utilisateur avancé)

Vous pouvez écrire des “bribes” de quelques lignes et les inclure ailleurs dans votre script. C’est pratique si vous avez plusieurs tâches ou blocs qui sont globalement les mêmes à l’exception de quelques lignes. Vous pouvez ainsi utiliser part au lieu de retaper tout le script. part remplace simplement le texte dans votre code. L’objectif principal est d’avoir un code plus court et plus efficace sans avoir à répéter les mêmes choses.

Exemple d’utilisation de part

part showAnimatedSquare
  show rectangle 0 0 50 50  255 255 0
  delay 100
  show rectangle 0 0 100 100  255 255 0
  delay 100
  show rectangle 0 0 150 150  255 255 0
  delay 100

part removeSquare
  clear -1 -2 -3

task some_task
  keys space
  part showAnimatedSquare
  readkey 1 1000
  part removeSquare
  delay 100

task another_task
  keys a
  part showAnimatedSquare
  readkey 1 5000
  part removeSquare
  delay 200

block test
  tasklist
    some_task 10
  end

block test
  tasklist
    another_task 10
  end

5.14 Vue d’ensemble de toutes les variables du système

Vous trouverez ci-dessous un aperçu rapide de presque toutes les variables “système” que vous pouvez utiliser dans votre script d’expérience. Elles sont décrites en détail dans le texte, mais ici elles sont toutes ensemble. Elles contiennent généralement toutes une valeur numérique, sauf pour TASKNAME et BLOCKNAME. Ces deux derniers ne sont utiles que dans l’instruction de sauvegarde. Les variables liées au choix ne sont pas énumérées. Elles doivent toutes être écrites en majuscules.

  • RT : dernier temps de réponse provenant de readkey ou readmouse
  • STATUS : de readkey(s)/readmouse, il peut être CORRECT, WRONG, TIMEOUT (or 1, 2, 3)
  • KEY : la touche qui a été préssée dansle dernier readkey/keystatus (un nombre)
  • UNDER_MOUSE : le numéro du stimulus sur lesquel le participant à cliqué
  • MOUSE_X : la position x de la souris dans le dernier état de readmouse
  • MOUSE_Y : la position x de la souris dans le dernier état de readmouse
  • TABLEROW : ligne du talbeau, choisie au hasard une fois par essai
  • TASKNAME : le noom de la tâche à laquelle appartient l’essai
  • TRIALCOUNT : le nombre de d’essais réalisés jusqu’à présent dans le cadre de n’importe quelle tâche
  • BLOCKNUMBER : Le numéro du bloc courant. Il démarre à 1.
  • BLOCKNAME : le nom du bloc courant auquel appartient l’essai
  • BLOCKORDER : Est normalement de 1, mais si plusieurs blockorder sont définis, donne le numéro d’e l’ordre de blocage’un blockorder choisi au hasard
  • RATE : La valeur choisie de l’échelle de d’évaluation
  • RATE_RT : Le RT du processus d’évaluation
  • RATE_STATUS : sera de 1 s’il est noté, ou de 3 s’il y a un délai d’attente (il n’y a pas de réponse correcte, bien sûr)
  • SHOW_COUNTER

Exemple de show counter

task my_task
   show rectangle 0 0 100 100   0 255 0  # green rectangle
   show rectangle -200 0 100 100   255 0 0  # red rectangle
   show rectangle 200 0 100 100   0 0 255  # blue rectangle
   show text SHOW_COUNTER ## this will be 3
   delay 1000
   clear SHOW_COUNTER ## delete last shown stimulus

SHOW_COUNTER remplace l’option show-counter set. C’est rarement nécessaire, mais dans un code avancé avec beaucoup de stimuli, il peut être utile d’effacer plus tard les stimuli de l’écran (parce que vous pourriez perdre la trace des numéros de compteur de stimuli).