Skip to content

Commit 3d40a3d

Browse files
committed
Update paper.md
Fixing some typos
1 parent 4b45783 commit 3d40a3d

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

paper.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ bibliography: paper.bib
3636

3737
# Summary
3838

39-
`wristpy` is an open-source Python package designed to streamline the processing and analysis of wrist-worn accelerometer data. The package has been developed in a modular framework to process actigraphy data from both GENEActiv and Actigraph watches, while supporting the extension for other wearable standards in the future, and is supported across multiple platforms (Windows, MacOS, and Ubuntu). This software can be accessed and used through either a command-line interface (CLI) or as an importable Python module. The main processing pipeline will generate outputs in either a `.csv` or `.parquet` format. The output contains timeseries data at a user-chosen temporal resolution, including: physical activity metrics, sleep onset and wake up times, non-wear period identification, and physical activity classification.
39+
`wristpy` is an open-source Python package designed to streamline the processing and analysis of wrist-worn accelerometer data. The package has been developed in a modular framework to process actigraphy data from both GENEActiv and Actigraph watches, while supporting the extension for other wearable standards in the future, and is supported across multiple platforms (Windows, macOS, and Ubuntu). This software can be accessed and used through either a command-line interface (CLI) or as an importable Python module. The main processing pipeline will generate outputs in either a `.csv` or `.parquet` format. The output contains timeseries data at a user-chosen temporal resolution, including: physical activity metrics, sleep onset and wake up times, non-wear period identification, and physical activity classification.
4040

4141

42-
`wristpy` has been designed modularly, which allows for incremental improvements of bottlenecks in the processing pipeline — such as the independent creation and adoption of a Rust-based reader for actigraphy data that dramatically improves scalability over the vendor-provided reader. With `wristpy`, researchers can directly access a variety of functions that allow them to read specific sensor data stored on the watch, calculate a variety of physical activity metrics, compare various non-wear or sleep detection algorithms, or take advantage of them together in a 1-click end-to-end preprocessing pipeline.
42+
`wristpy` has been designed modularly, which allows for incremental improvements of bottlenecks in the processing pipeline — such as the independent creation and adoption of a Rust-based reader for actigraphy data that dramatically improves scalability over the vendor-provided reader. With `wristpy`, researchers can directly access a variety of functions that allow them to read specific sensor data stored on the watch, calculate a variety of physical activity metrics, compare various non-wear or sleep detection algorithms, or take advantage of them together in a 1-click end-to-end preprocessing pipeline.
4343

4444

4545
# Statement of Need
@@ -50,10 +50,10 @@ Several open-source packages have been developed, namely GGIR [@van_hees_ggir_20
5050

5151
While tools exist that can read Actigraph data (GGIR), or detect multiple sleep windows per night (`skdh`), our requirements to flexibly combine data from various watches with various metrics precluded us from using these. An additional limiting factor of each of these libraries is their inability to extensibly support data from other sensors, including those on the devices they currently support (such as skin conductance and light). `wristpy` addresses needs by providing a development environment and utilities that allow it to:
5252
- Process raw accelerometer data from various watch manufacturers, including both GENEActiv and Actigraph watches (with plans to support more research grade devices in future development).
53-
- Access all sensors and metadata from these watches.
54-
- Support modular processing algorithms that can be easily extended while enforcing strict code quality guidelines, exhaustive test coverage, and documentation. Additionally, this documentation extends to a thorough and robust `logger` allowing users to easily track down and indetify the source of any `WARNING` or `ERROR` messages.
55-
- Be run in a 1-click fashion with an easy to use interface that requires no domain specific knowledge.
56-
- Allows batch processing for entire directories of data (e.g. a directory containing all data from a specific protocol can be processed in a 1-click fashion)
53+
- Access to all sensors and metadata from these watches.
54+
- Support modular processing algorithms that can be easily extended while enforcing strict code quality guidelines, exhaustive test coverage, and documentation. Additionally, this documentation extends to a thorough and robust `logger` allowing users to easily track down and identify the source of any `WARNING` or `ERROR` messages.
55+
- Run in a 1-click fashion with an easy to use interface that requires no domain specific knowledge.
56+
- Allows batch processing for entire directories of data (e.g. a directory containing all data from a specific protocol can be processed in a 1-click fashion).
5757
- Provide a suite of functionality for more advanced users to request specific outputs (choice of physical activity metrics, user-defined temporal resolution, activity thresholds, different non-wear algorithms).
5858
- Execute a streamlined implementation that can lead to computational savings on the order of magnitudes.
5959

@@ -67,12 +67,12 @@ Critically, `wristpy` leverages the history and experience of each of these tool
6767
- Data loading using `actfast` [@florian_rupprecht_childmindresearchactfast_2025] a Rust-based reader that provides up to nanosecond temporal resolution with direct access to all sensor information on the watch and key metadata information.
6868
- Post-manufacturer calibration to remove any bias in the device. The two primary methods are a direct minimization method and the default method in GGIR [@van_hees_autocalibration_2014].
6969
- Calculation of essential physical activity metrics such as ENMO (Euclidean norm minus one), angle-Z (orientation of the watch relative to the x-y axis), MAD (mean amplitude deviation) [@aittasalo_mean_2015], and Actigraph activity counts (agcounts) [@neishabouri_quantification_2022]. With current development to include MIMS (monitor independent motor summary unit) [@john_open-source_2019].
70-
- Implementation of validated algorithms for on-body wear detection namely from GGIR [@van_hees_ggir_2025], the combined temperature and acceleration algorithm from [@Zhou_2015], the `skdh` DETACH algorithm, and ensemble nonwear classification (PR currently under review).
71-
- Sleep period detection: following the default parameters from GGIR, we use the HDCZ [@van_hees_estimating_2018] and HSPT algorithms [@van_hees_novel_2015] to find sleep period candidates. Unlike the implementation within GGIR, we output all viable sleep window candidates across the entire available data. Furthermore, functionality is currently being implemented to remove overlap between sleep periods and non-wear times, eliminating the need for the researcher to verify or remove those overlaps manually.
70+
- Implementation of validated algorithms for on-body wear detection namely from GGIR [@van_hees_ggir_2025], the combined temperature and acceleration algorithm from [@Zhou_2015], the `skdh` DETACH algorithm. Most recently, we have added the option for users to test out the ensemble classification of multiple non-wear detection algorithms (any number from the above list can be chosen).
71+
- Sleep period detection: following the default parameters from GGIR, we use the HDCZ [@van_hees_estimating_2018] and HSPT algorithms [@van_hees_novel_2015] to find sleep period candidates. Unlike the implementation within GGIR, we output all viable sleep window candidates across the entire available data. Furthermore, any overlap between sleep periods and non-wear times are removed, eliminating the need for the researcher to verify or remove those overlaps manually.
7272
- Physical activity level classification: Categorize periods of physical activity as `inactive`, `light`, `moderate`, or `vigorous` activity, based on established thresholds for ENMO [@hildebrand_age_2014], MAD [@aittasalo_mean_2015], agcounts [@neishabouri_quantification_2022] or custom user-defined thresholds.
7373

7474
# Acknowledgements
75-
Financial and scientific support has been provided by Dr Michael P. Milham. Financial support has been provided by the California Department of Health Care Services (DHCS) as part of the Children and Youth Behavioral Health Initiative (CYBHI). We would also like to thank Dr. Michelle Freund, Dr. Vadim Zipunnikov, Dr. Andrew Leroux, and Dr. Kathleen R. Merikangas and her team at the NIMH, for their technical and administrative support.
75+
Financial support has been provided by Dr Michael P. Milham. Financial support has been provided by the California Department of Health Care Services (DHCS) as part of the Children and Youth Behavioral Health Initiative (CYBHI). We would also like to thank Dr. Michelle Freund, Dr. Vadim Zipunnikov, Dr. Andrew Leroux, and Dr. Kathleen R. Merikangas and her team at the NIMH, for their technical and administrative support.
7676

7777

7878
# References

0 commit comments

Comments
 (0)