Flywheel Hierarchy
Fundamentals
Flywheel Organization
In Flywheel, data is organized in "Containers". Containers are essentially objects (as in, object-oriented programming kind of objects) that contain actual data files, as well as metadata and custom information about the container or files themselves.
There are 8 containers used in Flywheel: Five of them are primarily hierarchical containers used for organization of data:
- Group
- Project
- Subject
- Session
- Acquisition
In these five containers, the parent/child order is rigidly enforced. For example, a "Group" container cannot directly have an acquisition container attached as a child. Instead, it must have a "Project" child, which must have a "Subject" child, which must have a "Session" child, which then can have an "Acquisition" child.
In addition to these five containers, there are two "sub-containers" that can belong to most containers regardless of their level in the hierarchy.
- File
- Analysis
Finally, there is the last container, which is used to organize running tasks (gears) on the site:
- Job
Each container has its own metadata attributes associated with it. Some are shared across multiple (or all) containers, while others are unique to a specific container type.
Additionally, users can upload custom information to any container as a form of additional metadata fields.
Groups
The Group Container has the following attributes:
- _id
- created
- editions
- label
- modified
- permissions
- providers
- tags
Group containers cannot have Files, Analyses, or Jobs associated with them.
Group containers may have child Projects:
Projects
The Project Container has the following attributes
- _id
- analyses
- created
- description
- editions
- files
- group
- info
- info_exists
- label
- modified
- notes
- parents
- permissions
- providers
- public
- tags
- templates
Note that analyses and files are attributes of the Project container.
Project containers may have Files and Analyses associated with them.
Project containers may have child Subjects:
>>> Project 1
├─ [analyses]
│ └─Analysis1
│ ├─ Analysis File1
│ └─ Analysis File2
│
├─ [files]
│ └─ Project File1
├─ Subject 1
└─ Subject 2
Subjects
The Subject Container has the following attributes:
- _id
- age
- analyses
- code
- cohort
- created
- ethnicity
- files
- firstname
- info
- info_exists
- label
- lastname
- master_code
- modified
- notes
- parents
- permissions
- project
- public
- race
- sex
- species
- strain
- tags
- type
Note that analyses and files are attributes of the Subject container.
The project attribute is not referring to a "child" Project that belongs to the subject, it instead is a reference to the Subject container's parent Project.
Subject containers may have Files and Analyses associated with them.
Subject containers may have child Sessions:
>>> Subject 1
├─ [analyses]
│ └─Analysis1
│ ├─ Analysis File1
│ └─ Analysis File2
│
├─ [files]
│ └─ Subject File1
├─ Session 1
└─ Session 2
Sessions
The Session Container has the following attributes:
- _id
- age
- analyses
- created
- files
- group
- info
- info_exists
- label
- modified
- notes
- operator
- parents
- permissions
- project
- project_has_template
- public
- satisfies_template
- subject
- tags
- timestamp
- timezone
- uid
- weight
Note that analyses and files are attributes of the Session container.
The group, project, and subject attributes are not referring to a "child" container that belongs to the session, it instead is a reference to the session's parent containers.
Session containers may have Files and Analyses associated with them.
Session containers may have child Acquisitions:
>>> Session 1
├─ [analyses]
│ └─Analysis1
│ ├─ Analysis File1
│ └─ Analysis File2
│
├─ [files]
│ └─ Session File1
├─ Acquisition 1
└─ Acquisition 2
Acquisitions
The Acquisition Container has the following attributes:
- _id
- analyses
- collections
- created
- files
- info
- info_exists
- label
- modified
- notes
- parents
- permissions
- public
- session
- tags
- timestamp
- timezone
- uid
Note that analyses and files are attributes of the Acquisition container.
The session attribute is not referring to a "child" Session that belongs to the acquisition, it instead is a reference to the acquisition's parent container.
Acquisition containers may have Files and Analyses associated with them:
>>> Acquisition 1
├─ [analyses]
│ └─Analysis1
│ ├─ Analysis File1
│ └─ Analysis File2
│
└─ [files]
└─ Acquisition File1
The files attached to an acquisition are the files that you actually see in Flywheel on a typical session view:

For all other containers, files will appear under the "Attachments" category when viewing the container's info:
