diff --git a/commons/connector/upload/physilog/physilog_acceleration.avsc b/commons/connector/upload/physilog/physilog_acceleration.avsc new file mode 100644 index 00000000..6295008e --- /dev/null +++ b/commons/connector/upload/physilog/physilog_acceleration.avsc @@ -0,0 +1,13 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogAcceleration", + "doc": "Data from 3-axis accelerometer sensor with gravitational constant g as unit.", + "fields": [ + {"name": "time", "type": "double", "doc": "Timestamp in unix time acquired locally from the service."}, + {"name": "timeReceived", "type": "double", "doc": "Timestamp in unix time received from Physilog device."}, + {"name": "x", "type": "float", "doc": "Acceleration in the x-axis (g)."}, + {"name": "y", "type": "float", "doc": "Acceleration in the y-axis (g)."}, + {"name": "z", "type": "float", "doc": "Acceleration in the z-axis (g)."} + ] +} diff --git a/commons/connector/upload/physilog/physilog_aggregated_statistics.avsc b/commons/connector/upload/physilog/physilog_aggregated_statistics.avsc new file mode 100644 index 00000000..86abdb5e --- /dev/null +++ b/commons/connector/upload/physilog/physilog_aggregated_statistics.avsc @@ -0,0 +1,23 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogAggregatedStatistics", + "doc": "Summary of aggregated statistics of the physilog test analysis.", + "fields": [ + {"name": "min", "type": ["null", "float"], "doc": "Minimum value of the dataset.", "default": null}, + {"name": "max", "type": ["null", "float"], "doc": "Maximum value of the dataset.", "default": null}, + {"name": "mean", "type": ["null", "float"], "doc": "Mean value of the dataset.", "default": null}, + {"name": "median", "type": ["null", "float"], "doc": "Median value of the dataset.", "default": null}, + {"name": "interQuartileRange", "type": ["null", "float"], "doc": "Inter quartile range value of the dataset.", "default": null}, + {"name": "coefficientVariability", "type": ["null", "float"], "doc": "Coefficient of variability.", "default": null}, + {"name": "ratio", "type": ["null", "string"], "doc": "Ratio scale of the dataset.", "default": null}, + {"name": "significantDigit", "type": ["null", "int"], "doc": "How many digits after the comma should be displayed on the reports.", "default": null}, + {"name": "standardDeviation", "type": ["null", "float"], "doc": "Standard deviation value of the dataset.", "default": null}, + {"name": "unit", "type": ["null", "string"], "doc": "Unit of the data.", "default": null}, + {"name": "propertyType", "type": { + "name": "PropertyType", + "type": "enum", + "doc": "Type of the parameter to group them together in different categories.", + "symbols": ["GENERAL", "TEMPORAL", "SPATIAL", "CLEARANCE", "UNKNOWN"]}, "doc": "Type of the property.", "default": "UNKNOWN"} + ] +} diff --git a/commons/connector/upload/physilog/physilog_cycle.avsc b/commons/connector/upload/physilog/physilog_cycle.avsc new file mode 100644 index 00000000..c5d0f074 --- /dev/null +++ b/commons/connector/upload/physilog/physilog_cycle.avsc @@ -0,0 +1,55 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogCycle", + "doc": "Cycle data extracted from the physilog test analysis.", + "fields": [ + {"name": "time", "type": "double", "doc": "Timestamp in unix time acquired locally from the device."}, + {"name": "timeReceived", "type": "double", "doc": "Timestamp in unix time received from Physilog device."}, + {"name": "cycleIndex", "type": ["null", "double"], "doc": "Index of the cycle.", "default": null}, + {"name": "healStrikeLeft", "type": ["null", "double"], "doc": "Heal strike from Left foot in (seconds).", "default": null}, + {"name": "healStrikeRight", "type": ["null", "double"], "doc": "Heal strike from Right foot in (seconds).", "default": null}, + {"name": "gaitCycleTimeLeft", "type": ["null", "double"], "doc": "Gait cycle time from Left foot in (seconds).", "default": null}, + {"name": "gaitCycleTimeRight", "type": ["null", "double"], "doc": "Gait cycle time from Right foot in (seconds).", "default": null}, + {"name": "cadenceLeft", "type": ["null", "double"], "doc": "Cadence from Left foot in (steps/minute).", "default": null}, + {"name": "cadenceRight", "type": ["null", "double"], "doc": "Cadence from Right foot in (steps/minute).", "default": null}, + {"name": "stanceRatioLeft", "type": ["null", "double"], "doc": "Stance ratio from Left foot in (% of cycle duration).", "default": null}, + {"name": "stanceRatioRight", "type": ["null", "double"], "doc": "Stance ratio from Right foot in (% of cycle duration).", "default": null}, + {"name": "swingRatioLeft", "type": ["null", "double"], "doc": "Swing ratio from Left foot in (% of gait cycle).", "default": null}, + {"name": "swingRatioRight", "type": ["null", "double"], "doc": "Swing ratio from Right foot in (% of gait cycle).", "default": null}, + {"name": "loadRatioLeft", "type": ["null", "double"], "doc": "Load ratio from Left in foot (% of stance).", "default": null}, + {"name": "loadRatioRight", "type": ["null", "double"], "doc": "Load ratio from Right in foot (% of stance).", "default": null}, + {"name": "footFlatRatioLeft", "type": ["null", "double"], "doc": "Foot flat ratio from Left foot in (% of stance).", "default": null}, + {"name": "footFlatRatioRight", "type": ["null", "double"], "doc": "Foot flat ratio from Right foot in (% of stance).", "default": null}, + {"name": "pushRatioLeft", "type": ["null", "double"], "doc": "Push ratio from Left foot in (% of stance).", "default": null}, + {"name": "pushRatioRight", "type": ["null", "double"], "doc": "Push ration from Right foot in (% of stance).", "default": null}, + {"name": "doubleSupportLeft", "type": ["null", "double"], "doc": "Double support, meaning the percentage of the gait cycle when both feet are on the ground from Left foot in (% of cycle duration).", "default": null}, + {"name": "doubleSupportRight", "type": ["null", "double"], "doc": "Double support, meaning the percentage of the gait cycle when both feet are on the ground from Right foot in (% of cycle duration).", "default": null}, + {"name": "strideLengthLeft", "type": ["null", "double"], "doc": "Stride length from Left foot in (meters).", "default": null}, + {"name": "strideLengthRight", "type": ["null", "double"], "doc": "Stride length from Right foot in (meters).", "default": null}, + {"name": "speedLeft", "type": ["null", "double"], "doc": "Gait speed from Left foot in (meters/s).", "default": null}, + {"name": "speedRight", "type": ["null", "double"], "doc": "Gait speed from Right foot in (meters/s).", "default": null}, + {"name": "peaksInSwingLeft", "type": ["null", "double"], "doc": "Maximum angular velocity during swing from Left foot in (degrees/s).", "default": null}, + {"name": "peaksInSwingRight", "type": ["null", "double"], "doc": "Maximum angular velocity during swing from Right foot in (degrees/s).", "default": null}, + {"name": "minimalToeClearanceLeft", "type": ["null", "double"], "doc": "Foot speed norm at minimal toe clearance from Left foot in (meters/s).", "default": null}, + {"name": "minimalToeClearanceRight", "type": ["null", "double"], "doc": "Foot speed norm at minimal toe clearance from Right foot in (meters/s).", "default": null}, + {"name": "turningAngleLeft", "type": ["null", "double"], "doc": "Turning angle from Left foot in (degree).", "default": null}, + {"name": "turningAngleRight", "type": ["null", "double"], "doc": "Turning angle from Right foot in (degree).", "default": null}, + {"name": "heelStrikePitchLeft", "type": ["null", "double"], "doc": "Foot pitch angle at heel strike from Left foot in (degree).", "default": null}, + {"name": "heelStrikePitchRight", "type": ["null", "double"], "doc": "Foot pitch angle at heel strike from Right foot in (degree).", "default": null}, + {"name": "toeOffPitchLeft", "type": ["null", "double"], "doc": "Foot pitch angle at toe-off from Left foot in (degree).", "default": null}, + {"name": "toeOffPitchRight", "type": ["null", "double"], "doc": "Foot pitch angle at toe-off from Right foot in (degree).", "default": null}, + {"name": "swingWidthLeft", "type": ["null", "double"], "doc": "Swing width from Left foot in (meters).", "default": null}, + {"name": "swingWidthRight", "type": ["null", "double"], "doc": "Swing width from Right foot in (meters).", "default": null}, + {"name": "pathLengthLeft", "type": ["null", "double"], "doc": "Three dimensional path length from Left foot in (% of stride length).", "default": null}, + {"name": "pathLengthRight", "type": ["null", "double"], "doc": "Three dimensional path length from Right foot in (% of stride length).", "default": null}, + {"name": "maximumHeelClearanceLeft", "type": ["null", "double"], "doc": "Maximum heel clearance from Left foot in (meters).", "default": null}, + {"name": "maximumHeelClearanceRight", "type": ["null", "double"], "doc": "Maximum heel clearance from Right foot in (meters).", "default": null}, + {"name": "maximumToeClearanceOneLeft", "type": ["null", "double"], "doc": "First Max toe clearance from Left foot in (meters).", "default": null}, + {"name": "maximumToeClearanceOneRight", "type": ["null", "double"], "doc": "First Max toe clearance from Right foot in (meters).", "default": null}, + {"name": "maximumToeClearanceTwoLeft", "type": ["null", "double"], "doc": "Second Max toe clearance from Left foot in (meters).", "default": null}, + {"name": "maximumToeClearanceTwoRight", "type": ["null", "double"], "doc": "Second Max toe clearance from Right foot in (meters).", "default": null}, + {"name": "minimumToeClearanceLeft", "type": ["null", "double"], "doc": "Minimum toe clearance from Left foot in (meters).", "default": null}, + {"name": "minimumToeClearanceRight", "type": ["null", "double"], "doc": "Minimum toe clearance from Right foot in (meters).", "default": null} + ] +} diff --git a/commons/connector/upload/physilog/physilog_cycle_aggregate.avsc b/commons/connector/upload/physilog/physilog_cycle_aggregate.avsc new file mode 100644 index 00000000..78281ca0 --- /dev/null +++ b/commons/connector/upload/physilog/physilog_cycle_aggregate.avsc @@ -0,0 +1,54 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogCycleAggregate", + "doc": "Statistical Summary of the physilog test analysis. More information can be found at https://gaitup.com/products-features/3d-gait-analysis-system/.", + "fields": [ + {"name": "time", "type": "double", "doc": "Timestamp in unix time acquired locally from the device."}, + {"name": "timeReceived", "type": "double", "doc": "Timestamp in unix time received from Physilog device."}, + {"name": "healStrikeLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of heal strike-Left in (seconds)."}, + {"name": "healStrikeRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of heal strike-Right in (seconds)."}, + {"name": "gaitCycleTimeLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of gait cycle time Left in (seconds)."}, + {"name": "gaitCycleTimeRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of gait cycle time-Right in (seconds)."}, + {"name": "cadenceLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of cadence - Left in (steps/minute)."}, + {"name": "cadenceRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of cadence - Right in (steps/minute)."}, + {"name": "stanceRatioLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of stance ratio - Left in (% of cycle duration)."}, + {"name": "stanceRatioRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of stance ratio - Right in (% of cycle duration)."}, + {"name": "swingRatioLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of swing ratio - Left in (% of gait cycle)."}, + {"name": "swingRatioRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of swing ratio - Right in (% of gait cycle)."}, + {"name": "loadRatioLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of load ratio- Left in (% of stance)."}, + {"name": "loadRatioRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of load ratio- Right in (% of stance)."}, + {"name": "footFlatRatioLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Foot flat ratio- Left in (% of stance)."}, + {"name": "footFlatRatioRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Foot flat ratio- Right in (% of stance)."}, + {"name": "pushRatioLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of push- Left in (% of stance)."}, + {"name": "pushRatioRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of push- Right in (% of stance)."}, + {"name": "doubleSupportLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Double support from Left foot in (% of cycle duration)."}, + {"name": "doubleSupportRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Double support Right foot in (% of cycle duration)."}, + {"name": "strideLengthLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of stride length - Left in (meters)."}, + {"name": "strideLengthRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of stride length - Right in (meters)."}, + {"name": "speedLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of gait speed- Left in (meters/s)."}, + {"name": "speedRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of gait speed- Right in (meters/s)."}, + {"name": "peaksInSwingLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of maximum angular velocity during swing - Left in (degrees/s)."}, + {"name": "peaksInSwingRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of maximum angular velocity during swing - Right in (degrees/s)."}, + {"name": "minimalToeClearanceLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of foot speed norm at minimal toe clearance- Left in (meters/s)."}, + {"name": "minimalToeClearanceRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of foot speed norm at minimal toe clearance- Right in (meters/s)."}, + {"name": "turningAngleLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of turning angle - Left in (degree)."}, + {"name": "turningAngleRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of turning angle - Right in (degree)."}, + {"name": "heelStrikePitchLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of foot pitch angle at heel strike -Left in (degree)."}, + {"name": "heelStrikePitchRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of foot pitch angle at heel strike -Right in (degree)."}, + {"name": "toeOffPitchLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of foot pitch angle at toe-off - Left in (degree)."}, + {"name": "toeOffPitchRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of foot pitch angle at toe-off - Right in (degree)."}, + {"name": "swingWidthLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of swing width - Left in (meters)."}, + {"name": "swingWidthRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of swing width - Right in (meters)."}, + {"name": "pathLengthLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of 3D path length - Left in (% of stride length)."}, + {"name": "pathLengthRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of 3D path length - Right in (% of stride length)."}, + {"name": "maximumHeelClearanceLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of maximum heel clearance - Left in (meters)."}, + {"name": "maximumHeelClearanceRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of maximum heel clearance - Right in (meters)."}, + {"name": "maximumToeClearanceOneLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Max.1 toe clearance - Left in (meters)."}, + {"name": "maximumToeClearanceOneRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Max.1 toe clearance - Right in (meters)."}, + {"name": "maximumToeClearanceTwoLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Max.2 toe clearance - Left in (meters)."}, + {"name": "maximumToeClearanceTwoRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of Max.2 toe clearance - Right in (meters)."}, + {"name": "minimumToeClearanceLeft", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of minimum toe clearance - Left in (meters)."}, + {"name": "minimumToeClearanceRight", "type": "PhysilogAggregatedStatistics", "doc": "Statistics of minimum toe clearance - Right in (meters)."} + ] +} diff --git a/commons/connector/upload/physilog/physilog_gyroscope.avsc b/commons/connector/upload/physilog/physilog_gyroscope.avsc new file mode 100644 index 00000000..59ec1702 --- /dev/null +++ b/commons/connector/upload/physilog/physilog_gyroscope.avsc @@ -0,0 +1,13 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogGyroscope", + "doc": "Data from the 3-axis gyroscope.", + "fields": [ + { "name": "time", "type": "double", "doc": "Device timestamp in UTC (s)." }, + { "name": "timeReceived", "type": "double", "doc": "Timestamp in unix time received from Physilog device." }, + { "name": "x", "type": "float", "doc": "Gyration in the x-axis (deg/s)." }, + { "name": "y", "type": "float", "doc": "Gyration in the y-axis (deg/s)." }, + { "name": "z", "type": "float", "doc": "Gyration in the z-axis (deg/s)." } + ] +} diff --git a/commons/connector/upload/physilog/physilog_metadata.avsc b/commons/connector/upload/physilog/physilog_metadata.avsc new file mode 100644 index 00000000..f4242cf4 --- /dev/null +++ b/commons/connector/upload/physilog/physilog_metadata.avsc @@ -0,0 +1,29 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogMetadata", + "doc": "Metadata about the physilog recordings and study participant (Represents the info part of the report).", + "fields": [ + {"name": "time", "type": "double", "doc": "Timestamp in unix time acquired locally from the device."}, + {"name": "timeReceived", "type": "double", "doc": "Timestamp in unix time received from Physilog device."}, + {"name": "age", "type": "int", "doc": "Age of the participant."}, + {"name": "date", "type": "int", "doc": "Date of the recording."}, + {"name": "gender", "type": "string", "doc": "Gender of the participant."}, + {"name": "height", "type": "int", "doc": "Height of the participant in (cm)."}, + {"name": "weight", "type": "double", "doc": "Weight of the participant in (kg)."}, + {"name": "language", "type": "string", "doc": "Language used to generate report."}, + {"name": "name", "type": "string", "doc": "Participant identifier or subject-id of the participant."}, + {"name": "protocol", "type": "string", "doc": "Name of the study or protocol."}, + {"name": "remark", "type": "string", "doc": "Remark or comments about the recording writing by the operator."}, + {"name": "filenames", "type": { + "type": "array", + "items": "string" + }, "doc": "List of filenames of raw data analysed for this report."}, + {"name": "discardInit", "type": "int", "doc": "The count of cycles that can ignored at the start and end of the recording for the analysis to analyze only steady state gait."}, + {"name": "shoeSize", "type": "double", "doc": "Shoe size of the participant in (cm)s."}, + {"name": "discardTurn", "type": "boolean", "doc": "Whether to discard turns from the recording in this analysis."}, + {"name": "resultV", "type": "double", "doc": "ResultVersion. Version of the JSON file format."}, + {"name": "softwareVersion", "type": "string", "doc": "Version of the Gait UP software used."}, + {"name": "firmwareVersion", "type": "string", "doc": "Version of the Gait UP firmware used."} + ] +} diff --git a/commons/connector/upload/physilog/physilog_summary.avsc b/commons/connector/upload/physilog/physilog_summary.avsc new file mode 100644 index 00000000..a606eb88 --- /dev/null +++ b/commons/connector/upload/physilog/physilog_summary.avsc @@ -0,0 +1,18 @@ +{ + "namespace": "org.radarcns.connector.upload.physilog", + "type": "record", + "name": "PhysilogSummary", + "doc": "Summary of the physilog test analysis.", + "fields": [ + {"name": "time", "type": "double", "doc": "Timestamp in unix time acquired locally from the device."}, + {"name": "timeReceived", "type": "double", "doc": "Timestamp in unix time received from Physilog device."}, + {"name": "testTime", "type": "double", "doc": "Time taken to perform the test in seconds."}, + {"name": "gaitTime", "type": "double", "doc": "Time of gait activity during the test in seconds."}, + {"name": "turnTime", "type": "double", "doc": "Time took to turn in seconds."}, + {"name": "totalCycles", "type": "int", "doc": "Total amount of cycles analysed from the test."}, + {"name": "discardedCycles", "type": "int", "doc": "Total amount of cycles discarded from the test."}, + {"name": "analysedCycles", "type": "int", "doc": "Total amount of cycles performed during the test."}, + {"name": "turningCycles", "type": "int", "doc": "Total amount of cycles performed to make turns."}, + {"name": "distance", "type": "double", "doc": "Distance walked during the recording in meters."} + ] +} diff --git a/specifications/connector/radar-physilog-connector.yml b/specifications/connector/radar-physilog-connector.yml new file mode 100644 index 00000000..78141661 --- /dev/null +++ b/specifications/connector/radar-physilog-connector.yml @@ -0,0 +1,33 @@ +#====================================== Physilog Device Data =======================================# +name: RADAR-PHYSILOG-CONNECTOR +vendor: GaitUp +model: Physilog Device +version: 1.0.0 +doc: Spec for RADAR-base Physilog data upload connector. Schemas should be registered in the connector. +data: + # raw data + - doc: Data from 3-axis accelerometer sensor with gravitational constant g as unit. Data extracted from the CSV file. + topic: connect_upload_physilog_acceleration + value_schema: .connector.upload.physilog.PhysilogAcceleration + + - doc: Data from the 3-axis gyroscope with deg/s as unit. + topic: connect_upload_physilog_gyroscope + value_schema: .connector.upload.physilog.PhysilogGyroscope + + # meta-data + - doc: Data that contains additional meta-data of the recording. + topic: connect_upload_physilog_metadata + value_schema: .connector.upload.physilog.PhysilogMetadata + + - doc: Summary of the physilog test analysis. + topic: connect_upload_physilog_summary + value_schema: .connector.upload.physilog.PhysilogSummary + + # cycle data + - doc: Cycle data extracted from the physilog test analysis. + topic: connect_upload_physilog_cycle + value_schema: .connector.upload.physilog.PhysilogCycle + + - doc: Summary of cycle data computed from the physilog analysis. + topic: connect_upload_physilog_cycle_aggregated + value_schema: .connector.upload.physilog.PhysilogCycleAggregate