Skip to content

Conversation

@laurendiaz
Copy link

This is a rough class diagram of how we propose structuring the NWB wearables extension we're working on with the Baylor team and how it fits into the greater NWB data structures. Let me know what you think and if there's any suggestions for improvement!

Adding Erik for awareness

@yarikoptic
Copy link
Contributor

FWIW: here is a shortcut url to view the rendered file: https://github.com/aplbrain/BBQS-EMBER/blob/4-wearables-ndx-uml/doc/design/wearables_ndx.mmd

@laurendiaz
Copy link
Author

Wearables data types received from Baylor

This is all the most relevant data made available by the wearables being used (Oura Ring and Apple Watch) but it is not known whether all the data will be used/saved into NWB. A lot of this data will either be in the form of timeseries or sparse array. The current proposed structure only outlines how timeseries data will be stored, as we are still trying to determine the best course of action for sparse data. Any insight on that front would also be very much welome!

Oura API Documentation
Apple Watch Documentation

Device Metric Data Type
Apple Watch Vital Signs - heartRate
Apple Watch Vital Signs - lowHeartRateEvent
Apple Watch Vital Signs - highHeartRateEvent
Apple Watch Vital Signs - irregularHeartRateEvent
Apple Watch Vital Signs - irregularHeartRhythmEvent
Apple Watch Vital Signs - restingHeartRate
Apple Watch Vital Signs - heartRateVariabilitySDNN
Apple Watch Vital Signs - heartRateRecoveryOneMinute
Apple Watch Vital Signs - atrialFibrillationBurden
Apple Watch Vital Signs - walkingHeartRateAverage
Apple Watch Vital Signs - oxygenSaturation
Apple Watch Vital Signs - bodyTemperature
Apple Watch Vital Signs - bloodPressure
Apple Watch Vital Signs - bloodPressureSystolic
Apple Watch Vital Signs - bloodPressureDiastolic
Apple Watch Vital Signs - respiratoryRate
Oura Ring id string
Oura Ring day string
Oura Ring timestamp string
Oura Ring contributors schema object
Oura Ring Daily Activity - class_5_min int
Oura Ring Daily Activity - score int
Oura Ring Daily Activity - active_calories int
Oura Ring Daily Activity - average_met_minutes string
Oura Ring Daily Activity - contributors schema object
Oura Ring Daily Activity - equivalent_walking_distance int
Oura Ring Daily Activity - high_activity_met_minutes int
Oura Ring Daily Activity - high_activity_time int
Oura Ring Daily Activity - inactivity_alerts int
Oura Ring Daily Activity - low_activity_met_minutes int
Oura Ring Daily Activity - low_activity_time int
Oura Ring Daily Activity - medium_activity_met_minutes int
Oura Ring Daily Activity - medium_activity_time int
Oura Ring Daily Activity - met schema object
Oura Ring Daily Activity - meters_to_target int
Oura Ring Daily Activity - non_wear_time int
Oura Ring Daily Activity - resting_time int
Oura Ring Daily Activity - sedentary_met_minutes int
Oura Ring Daily Activity - sedentary_time int
Oura Ring Daily Activity - steps int
Oura Ring Daily Activity - target_calories int
Oura Ring Daily Activity - target_meters int
Oura Ring Daily Activity - total_calories int
Oura Ring Cardiovascular Age - vascular_age int
Oura Ring Daily Readiness - score Union[int, None]
Oura Ring Daily Readiness - temperature_deviation Union[float, None]
Oura Ring Daily Readiness - temperature_trend_deviation Union[float, None]
Oura Ring Daily Resilience - level str
Oura Ring Daily Sleep Routes - id string
Oura Ring Daily Sleep Routes - score Union[int, None]
Oura Ring Daily Spo2 - spo2_percentage string
Oura Ring Daily Spo2 - breathing_disturbance_index Union[int, null]
Oura Ring Daily Stress - stress_high Union[int, null]
Oura Ring Daily Stress - recovery_high Union[int, null]
Oura Ring Daily Stress - day_summary Union[string, null]
Oura Ring Heart Rate Routes - data[bpm, source, timestamp] Array[int, string, string]
Oura Ring Personal Info - age Union[int, null]
Oura Ring Personal Info - weight Union[float, null]
Oura Ring Personal Info - height Union[float, null]
Oura Ring Personal Info - biological sex Union[string, null]
Oura Ring Personal Info - email Union[string, null]
Oura Ring Sleep - average_breath Union[float, null]
Oura Ring Sleep - average_heart_rate Union[float, null]
Oura Ring Sleep - average_hrv Union[int, null]
Oura Ring Sleep - awake_time Union[int, null]
Oura Ring Sleep - bedtime_end string
Oura Ring Sleep - bedtime_start string
Oura Ring Sleep - deep_sleep_duration Union[int, null]
Oura Ring Sleep - efficiency Union[int, null]
Oura Ring Sleep - heart_rate Union[object, null]
Oura Ring Sleep - hrv Union[object, null]
Oura Ring Sleep - latency Union[int, null]
Oura Ring Sleep - light_sleep_duration Union[int, null]
Oura Ring Sleep - low_battery_alert bool
Oura Ring Sleep - lowest_heart_rate Union[int, null]
Oura Ring Sleep - movement_30_sec Union[string, null]
Oura Ring Sleep - period int
Oura Ring Sleep - readiness Union[object, null]
Oura Ring Sleep - readiness_score_delta Union[int, null]
Oura Ring Sleep - rem_sleep_duration Union[int, null]
Oura Ring Sleep - restless_periods Union[int, null]
Oura Ring Sleep - sleep_phase_5_min Union[string, null]
Oura Ring Sleep - sleep_score_delta Union[int, null]
Oura Ring Sleep - sleep_algorithm_version Union[string, null]
Oura Ring Sleep - time_in_bed int
Oura Ring Sleep - total_sleep_duration Union[int, null]
Oura Ring Sleep - type string
Oura Ring Vo2 Max - vo2_max Union[float, null]

@yarikoptic
Copy link
Contributor

Dear @rly . For EMBER we are investigating optimal formats to store various data from wearable devices.

  • do you know of any other NWB extension which could potentially be relevant here?
  • could you please have a look at the tentative model presented in the UML?

Dear @smoia, I will like many of the aforementioned datatypes fall under the auspice, or could be adopted by BIDS physio data/extension and physiopy... are you working with such data types? have examples to point to among public datasets?

Base automatically changed from dandi_focused to main March 18, 2025 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants