Experiment directory¶
A PsyNet experiment implementation is defined by a particular experiment directory. This directory contains all the files you need to run your experiment. When you deploy an experiment, a slimmed down version of this directory is created and uploaded to a web server.
When you are developing a PsyNet experiment it is good practice to use a version control system for keeping track of changes to your experiment directory. In particular, we advise that you use Git because PsyNet itself uses some Git features as part of its deployment process. To learn more visit Version control with Git.
Your experiment directory contains various important files and directories. Let’s talk through what these different files and directories do. While reading this document, have a look at the experiment directory from a real PsyNet experiment, the Carillon Experiment.
docker
contains various scripts for working with Docker. These are used when you run commands such asbash docker/psynet debug
. Normally you should not edit these files directly, but instead use the boilerplate files provided by PsyNet. You can update these files to their latest PsyNet versions by runningpsynet update-scripts
within an experiment directory.docs
contains documentation for your experiment. PsyNet provides boilerplate documentation files for running your experiment, which you can update by runningpsynet update-scripts
within an experiment directory. If you like you can also add extra documentation specific to your experiment here.static
can be used as a storage place for files that the front-end browser can access directly via HTTP. If you wanted to bypass PsyNet’s asset management system, you could put individual scripts or media files in here, and then access them viahttps://your-experiment-url/static/your-file.png
. If you are storing large files you may want instead to use PsyNet’s asset management system, see Assets for more details.templates
is used for customising PsyNet’s front-end. It contains Jinja2 templates; Jinja2 is a popular templating library for Python. Most experiments do not need to use this folder, but for an example of how to use it, see Writing custom frontends..gitignore
controls which files Git tracks. It takes a standard format that comes from Git; you can learn more by Googlinggitignore
. If a file is included within.gitignore
, it will not be included in your Git repository and hence won’t be visible on (for example) GitHub. Importantly, files included ingitignore
are also excluded from experiment deployments. This means for example that if you specify media files ingitignore
then they won’t be uploaded to the remote server’s experiment directory. By default, there are some files/folders that are always excluded from this upload process, and this list is hard-coded into Dallinger. Currently it looks like this:.git
config.txt
*.db
*.dmg
node_modules
snapshots
data
develop
server.log
__pycache__
Dockerfile
is used by Docker to define the experiment’s Docker image. Normally you should not edit this file directly, but instead use the boilerplate file provided by PsyNet. You can update this file to their latest PsyNet versions by runningpsynet update-scripts
within an experiment directory.Dockertag
determines the name of the Docker image that is built for the present experiment. It defaults to the name of the current directory.README.md
is a README file. You should put information about your experiment here for future readers.__init__.py
is created automatically when you deploy the experiment; it tells Python to treat the directory as a package. You don’t need to worry about this file in practice.carillon_samples.csv
is specific to the Carillon Experiment implementation, we don’t need to worry about it now.config.txt
is a configuration file. It defines various important configuration parameters for when you deploy an experiment online.constraints.txt
stores the versions of the different Python packages that will be used when you deploy your experiment. It is automatically generated, don’t edit it yourself. Note: the role of this file is currently unclear for Docker experiments. At the time of writing (April 2023) this file is ignored in Docker deployments, but this may change.experiment.py
is a Python file that defines the primary experiment logic.instructions.py
is specific to the Carillon Experiment implementation, we don’t need to worry about it now.prepare_docker_image.sh
is an optional file that provides extra setup code that is run when preparing the experiment’s Docker image. Here we use it to install a particular dependency for stimulus generation.pytest.ini
is a boilerplate PsyNet file, you should not have to edit it yourself.questionnaire.py
is specific to the Carillon Experiment implementation, we don’t need to worry about it now.requirements.txt
is where you specify the packages that your experiment will depend on. This file should always contain a link to the PsyNet library, for example:psynet@git+https://gitlab.com/psynetdev/psynet@d54c3f7a0afddebe1e53676c47c9a31f9cb9a827#egg=psynet
This particular example indicates that the experiment should use a particular version of PsyNet from GitHub. The version is specified here by the long string that comes after the
@
symbol:d54c3f7a0afddebe1e53676c47c9a31f9cb9a827
. This string corresponds to a particular commit hash. You can also specify a particular version number here, for example10.3.0
.server.log
is an automatically generated log file, don’t worry about it.synth.py
is specific to the Carillon Experiment implementation, we don’t need to worry about it now.test.py
is a boilerplate PsyNet file that defines generic tests for the experiment. You can run these tests in Docker by runningdocker/run pytest test.py
. If you want to customize these tests you should normally override specific methods in the Experiment class, for exampleExperiment.test_experiment
andExperiment.test_check_bots
.volume_calibration.py
is specific to the Carillon Experiment implementation, we don’t need to worry about it now.