From 93c628344b1d5d081733c9b869aa510e33327066 Mon Sep 17 00:00:00 2001 From: m-miedema <39968233+m-miedema@users.noreply.github.com> Date: Thu, 17 Jul 2025 09:19:44 -0400 Subject: [PATCH 01/20] Update datatypes.yaml I'm not sure if a corresponding change should be made to modalities.yaml, I'm having trouble finding where the latter table is used by the compiler macros. --- src/schema/objects/datatypes.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/schema/objects/datatypes.yaml b/src/schema/objects/datatypes.yaml index b3fdc455e3..115e143a96 100644 --- a/src/schema/objects/datatypes.yaml +++ b/src/schema/objects/datatypes.yaml @@ -72,6 +72,11 @@ phenotype: Participant level measurement data (for example, responses from multiple questionnaires) split into individual files separate from `participants.tsv`. +physio: + value: physio + display_name: Physiological Data + description: | + Continuous peripheral physiological recordings such as respiratory, cardiac, pulse, gastric fluctuations, skin conductance, or blood pressure changes. nirs: value: nirs display_name: Near-Infrared Spectroscopy From e731d9f4aace6888f5e8837fbc14b6afb1c22041 Mon Sep 17 00:00:00 2001 From: m-miedema <39968233+m-miedema@users.noreply.github.com> Date: Wed, 13 Aug 2025 14:58:09 -0400 Subject: [PATCH 02/20] Migrate new/updated metadata fields relevant for raw data Some checks on formatting (particularly for how I entered the allowable values) might be necessary here, I also added some comments on the BEP document to flag potential issues or changes we could make going forward. --- src/schema/objects/metadata.yaml | 119 +++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 4 deletions(-) diff --git a/src/schema/objects/metadata.yaml b/src/schema/objects/metadata.yaml index f7bdc4defa..7e8845fa49 100644 --- a/src/schema/objects/metadata.yaml +++ b/src/schema/objects/metadata.yaml @@ -51,6 +51,13 @@ AcquisitionMode: description: | Type of acquisition of the PET data (for example, `"list mode"`). type: string +AcquisitionObservations: + name: AcquisitionObservations + display_name: Acquisition Observations + description: | + General observations during the acquisition that might alter physiological fluctuations, + their recording, or their QC/QA (e.g. subject moves hands often, or does not comply with instructions). + type: string AcquisitionVoxelSize: name: AcquisitionVoxelSize display_name: Acquisition Voxel Size @@ -68,6 +75,13 @@ AcquisitionVoxelSize: type: number exclusiveMinimum: 0 unit: mm +AmplifierSettings: + name: AmplifierSettings + display_name: AmplifierSettings + description: | + Amplifier settings during data acquisition (e.g. gain, sampling filters, bandwidth, etc.) + Strings MAY be represented in the format Setting:Value (e.g. Gain:10) + type: array of strings Anaesthesia: name: Anaesthesia display_name: Anaesthesia @@ -499,6 +513,36 @@ CellType: Values SHOULD come from the [cell ontology](https://obofoundry.org/ontology/cl.html). type: string +ChannelDeviceSerialNumber: + name: ChannelDeviceSerialNumber + display_name: Channel Device Serial Number + description: | + The serial number(s) of each piece of hardware equipment that + produced the measurements, including the sensor, connecting cables, + and amplifiers. Equipment should be listed in order of attachment, + from participant to recording device. A pseudonym can also be used to + prevent the equipment from being identifiable, so long as each + pseudonym is unique within the dataset. + type: string or array of strings +ChannelManufacturer: + name: ChannelManufacturer + display_name: Channel Manufacturer + description: | + Manufacturer(s) of each piece of the equipment that + produced the measurements upstream of the recording device, including + the sensor, connecting cables, and amplifiers. If more than one manufacturer + applies, list the manufacturer for each piece of hardware, in order + of attachment from participant to recording device. + type: string or array of strings +ChannelManufacturersModelName: + name: ChannelManufacturersModelName + display_name: Channel Manufacturers Model Name + description: | + Manufacturer's model name(s) of each piece of hardware equipment that + produced the measurements upstream of the recording device, including + the sensor, connecting cables, and amplifiers. Equipment should be listed + in order of attachment, from participant to recording device. + type: string or array of strings ChemicalShiftOffset: name: ChemicalShiftOffset display_name: Chemical Shift Offset @@ -642,6 +686,14 @@ Columns: type: array items: type: string +ConcurrenceGroup: + name: ConcurrenceGroup + display_name: ConcurrenceGroup + description: | + An identifier shared by files recorded concurrently. + Each "ConcurrenceGroup" MUST be a unique string within one participant's tree, + shared only by the continuously recorded data which was measured simultaneously. + type: string Container: name: Container display_name: Container @@ -927,7 +979,8 @@ DeviceSerialNumber: name: DeviceSerialNumber display_name: Device Serial Number description: | - The serial number of the equipment that produced the measurements. + The serial number of the equipment that recorded the measurements: + that is, the main recording device. A pseudonym can also be used to prevent the equipment from being identifiable, so long as each pseudonym is unique within the dataset. type: string @@ -2498,13 +2551,13 @@ Manufacturer: name: Manufacturer display_name: Manufacturer description: | - Manufacturer of the equipment that produced the measurements. + Manufacturer of the main equipment that recorded the measurements. type: string ManufacturersModelName: name: ManufacturersModelName display_name: Manufacturers Model Name description: | - Manufacturer's model name of the equipment that produced the measurements. + Manufacturer's model name of the main equipment that recorded the measurements. type: string MatrixCoilMode: name: MatrixCoilMode @@ -2564,6 +2617,26 @@ MeasurementToolMetadata: $ref: objects.metadata.TermURL Description: $ref: objects.metadata.Description +MeasureType: + name: MeasureType + display_name: Measure Type + description: | + Describes the category of physiological data which was recorded. + type: string + enum: + - Trigger, + - PPG + - ECG + - Ventilation + - CO2 + - O2 + - PetCO2 + - PetO2 + - EDA-tonic + - EDA-phasic + - EDA-total + - BP + - Other MetaboliteAvail: name: MetaboliteAvail display_name: Metabolite Available @@ -3037,6 +3110,7 @@ PhysioType: type: string enum: - $ref: objects.enums.PhysioTypeGeneric.value + - $ref: objects.enums.PhysioTypeSpecified.value - $ref: objects.enums.PhysioTypeEyetrack.value PixelSize: name: PixelSize @@ -3067,6 +3141,13 @@ PixelSizeUnits: - mm - um - nm +Placement: + name: Placement + display_name: Placement + description: | + Placement of sensor on the measurement subject. + Non-physiological and trigger columns must have “n/a”. + type: string PlasmaAvail: name: PlasmaAvail display_name: Plasma Avail @@ -3936,6 +4017,12 @@ SoftwareFilters: - type: string enum: - n/a +SoftwareModels: + name: SoftwareModels + display_name: Software Models + description: | + Name of the software which recorded the measurements. + type: string SoftwareName: name: SoftwareName display_name: Software Name @@ -4165,9 +4252,12 @@ StartTime: display_name: Start Time description: | Start time in seconds in relation to the start of acquisition of the first - data sample in the corresponding (neural) dataset (negative values are allowed). + data sample in a reference file sharing the same "ConcurrenceGroup" identifier + (negative values are allowed). Within each set of “ConcurrenceGroup” files, + a reference file MUST be designated with a “StartTime” equaling 0. This data MAY be specified with sub-second precision using the syntax `s[.000000]`, where `s` reflects whole seconds, and `.000000` reflects OPTIONAL fractional seconds. + If no ConcurrenceGroup identifier is defined, the StartTime should be set to 0. type: number unit: s StationName: @@ -4225,6 +4315,27 @@ SubjectArtefactDescription: If this field is set to `"n/a"`, it will be interpreted as absence of major source of artifacts except cardiac and blinks. type: string +SubjectArtefactDescription: + name: SubjectArtefactDescription + display_name: Subject Artifact Description + description: | + Freeform description of the observed subject artifact and its possible cause + (for example, `"Vagus Nerve Stimulator"`, `"non-removable implant"`). + If this field is set to `"n/a"`, it will be interpreted as absence of major + source of artifacts except cardiac and blinks. + type: string +SubjectPosition: + name: SubjectPosition + display_name: Subject Position + description: | + Position of the subject during data acquisition. + type: string + enum: + - prone + - supine + - standing + - sitting + - reclined TablePosition: name: TablePosition display_name: Table Position From 75c921b9f9fd3f25a9bf6fdaf5de8f7aa5276e6a Mon Sep 17 00:00:00 2001 From: ShiyuBelleWang <120072352+ShiyuBelleWang@users.noreply.github.com> Date: Fri, 18 Jul 2025 15:35:28 -0400 Subject: [PATCH 03/20] Incorporate physio BEP section 4 --- .../physiological-recordings.md | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/src/modality-specific-files/physiological-recordings.md b/src/modality-specific-files/physiological-recordings.md index 6d6adc41c6..4ccc7c1e85 100644 --- a/src/modality-specific-files/physiological-recordings.md +++ b/src/modality-specific-files/physiological-recordings.md @@ -732,3 +732,173 @@ would read: } } ``` +) }} + +## Raw Physiological Data + +### 1. File formats and directory structure + +#### 1.1 General principles + +The file and dataset naming conventions for physiological data follow the common principles of BIDS. When present, physiological recordings **SHOULD** be stored as compressed tabular files (`.tsv.gz` format) along with corresponding JSON files for storing metadata fields (see below). + +An example of the physio directory structure is shown below: + +``` +dataset/ +[...] +sub-