Research Infrastructure
iAm provides a complete research data management system for running multi-day studies with multiple participants. This page describes the project, cohort, and collection task entities that form the research layer of the platform.
Research Entities
Project
A Project represents a single atomic research endeavor. It serves as the parent to all data collection activities.
- Owned by a User (the principal investigator)
- Contains one or more Cohorts
- Links to Observers enrolled in the study
- Can produce Publications that cite the measurement definitions used
Cohort
A Cohort groups participants within a Project. Projects can have as many cohorts as needed.
Common uses:
- Control vs. experimental groups: Different cohorts for different conditions
- Longitudinal waves: Different cohorts for different time periods
- Skill levels: Grouping by meditation experience, for example
Each Cohort:
- Contains one or more CollectionTasks
- Links to the Observers (participants) assigned to it
- Defines the measurement protocol for its members
CollectionTask
A CollectionTask defines a single measurement requirement for participants.
- References a specific measurement type version (SessionTypeVersion, SurveyTypeVersion, or SequenceTypeVersion)
- Specifies how many times a participant must complete it
- For example: "Complete 7 verbal thought tracking sessions" or "Complete the FFMQ-15 survey once"
CollectionTaskState
For each participant assigned to a CollectionTask, a CollectionTaskState tracks their progress.
- Links to the Observer (participant) and their completed measurements
- Tracks how many completions out of the required total
- All Observer measurements for a given CollectionTask are linked through this entity
Relationship Structure
Project
│
├── HAS → Cohort (Control Group)
│ ├── HAS → CollectionTask (7x Verbal Thought Sessions)
│ │ └── HAS → CollectionTaskState (per observer)
│ │ ├── HAS → Observer
│ │ └── HAS → Session, Survey, or Sequence
│ ├── HAS → CollectionTask (Pre/Post FFMQ-15)
│ └── HAS → Observer (participants)
│
└── HAS → Cohort (Experimental Group)
├── HAS → CollectionTask (...)
└── HAS → Observer (participants)
Study Protocol Example: CRAWL
The CRAWL (Conscious Reporting of Awareness With Logging) pilot study demonstrates how these entities work together in a real 5-day protocol:
Project: "CRAWL" -- studying verbal thought patterns around meditation practice
Cohort: Single cohort with all participants
Collection Tasks:
- Complete a daily Sequence (5 times total) containing:
- Toronto Mindfulness Scale (pre-practice survey)
- Pre-practice verbal thought tracking session (5 min)
- Nostril breath awareness meditation session (20 min)
- Post-practice verbal thought tracking session (5 min)
- Toronto Mindfulness Scale (post-practice survey)
- Meditation Depth Index (survey)
- Reflective awareness survey
- Complete baseline questionnaires (Day 1 only):
- Onboarding survey
- FFMQ-15
- WEMWBS
- Complete post-study questionnaires (Day 5 only):
- FFMQ-15 (post)
- WEMWBS (post)
- Feedback survey
Each participant's progress through these tasks is tracked via CollectionTaskState entities, with all completed Sessions, Surveys, and Sequences linked back to the research infrastructure.
Additional Research Features
Publications
Publication entities link research papers to specific type definitions used in iAm. This creates a bidirectional connection between academic work and the measurement instruments, enabling evidence-based refinement of experience definitions.
Participant Codes
ParticipantCodeRecord entities manage study enrollment codes, linking anonymous participant identifiers to Observer entities within a Project.
Presets
Preset entities save configurations for quick session setup -- storing specific ExperienceType selections, duration preferences, and other parameters. Useful for ensuring consistent protocol deployment across participants.
Querying Research Data
Get all sessions for a project
MATCH (project:Project {uniqueName: "CRAWL"})
-[:HAS]->(cohort:Cohort)
-[:HAS]->(observer:Observer)
-[:HAS]->(session:Session)
RETURN observer.alias, session.id, session.startTime, session.endTime
ORDER BY observer.alias, session.startTime
Get collection task completion status
MATCH (project:Project {uniqueName: "CRAWL"})
-[:HAS]->(cohort:Cohort)
-[:HAS]->(task:CollectionTask)
-[:HAS]->(state:CollectionTaskState)
-[:HAS]->(observer:Observer)
RETURN observer.alias, task.name, state.completedCount, task.requiredCount
Get survey responses for a specific instrument
MATCH (project:Project {uniqueName: "CRAWL"})
-[:HAS]->(cohort:Cohort)
-[:HAS]->(task:CollectionTask)
-[:IMPLEMENTS]->(stv:SurveyTypeVersion {name: "FFMQ-15"})
MATCH (cohort)-[:HAS]->(observer:Observer)
MATCH (observer)<-[:HAS]-(survey:Survey)-[:IMPLEMENTS]->(stv)
MATCH (survey)-[:REPORTED]->(response:Response)-[:TO]->(question:Question)
RETURN observer.alias, question.prompt, response.value
ORDER BY observer.alias, question.index