Commit Graph

58 Commits

Author SHA1 Message Date
sawinglogz
c8520c8449 Move PRS1 test card scanning into PRS1Loader.
Also reverse the chronological order of tests to provide the most complete output.

The loader itself doesn't yet use the new machine scanner.
2020-03-09 10:28:34 -04:00
sawinglogz
53525a7949 Refactor PRS1 test card scanning in preparation for unifying with loader.
This splits out scanning the directories from processing them, which
also allows for sorting.
2020-03-08 20:58:36 -04:00
sawinglogz
0ee827b294 Add Resmed-specific settings channels to YAML. 2020-02-10 23:48:23 -05:00
sawinglogz
bd68525246 Turn off backups in Resmed regression tests. 2020-02-10 20:58:49 -05:00
sawinglogz
7701694b14 Add support for YAML output by Resmed loader for regression testing. 2020-02-10 16:04:03 -05:00
sawinglogz
cdeba58c5d Fix minor cleanup bugs in the Resmed regression tests that were causing crashes. 2020-02-03 11:43:13 -05:00
sawinglogz
32ffcc4f94 First pass at Dreem CSV loader.
Something's not quite right about the hypnogram timestamps, since
there are more than would fit within the start/stop times.
2020-01-29 20:00:33 -05:00
sawinglogz
f33dd654f8 Add generic CSV reader class and switch ZEO loader to it.
No change in functionality for ZEO files.

Resolves crashing (assertion failure) on non-ZEO CSV files.
2020-01-29 17:05:03 -05:00
sawinglogz
8ef068af7e Fix ZEO loader to handle MyZeo 0.3.1 date formatting.
Also make the UI more informative and fix up the regression test output.
2020-01-29 16:21:42 -05:00
sawinglogz
448bfa048c Refactor ZEO loader to allow for testing, add regression tests. 2020-01-29 15:47:11 -05:00
sawinglogz
cb576437ab Clean up noise and memory leaks in unit tests. 2020-01-29 09:10:29 -05:00
sawinglogz
e11bdf2633 Update Viatom tests to process folders of test data. 2020-01-26 20:05:14 -05:00
sawinglogz
4ebc7d3681 Rename POS_Motion channel to POS_Movement to match Viatom report terminology.
Also move database updates to Open() rather than at each file imported.
2020-01-26 19:50:18 -05:00
sawinglogz
b6f7ebac6f Move Viatom filename pattern matching into loader. 2020-01-26 17:51:56 -05:00
sawinglogz
9cb7de950b Add regression tests for Viatom loader.
Also enable the native file dialog box for importing Viatom files.
2020-01-23 19:11:05 -05:00
sawinglogz
d7fade5f4c Add Version class for Semantic Versioning 2.0.0 parsing and comparison.
Also add unit tests for the new class.
2020-01-15 17:00:21 -05:00
sawinglogz
d898581ca4 Remove version.h dependency from appsettings.h to reduce unnecessary recompiling. 2020-01-15 16:34:28 -05:00
sawinglogz
9edfd59476 Fix PRS1 humidity import.
Previously it was reporting spurious information when the humidifier was
disconnected.  Now it only reports settings details when the humidifier is
connected (the only time they're valid.)

It also now reports the humidification mode (fixed, adaptive, or heated
tube), and the heated tube temperature when appropriate.
2020-01-11 19:14:01 -05:00
sawinglogz
50b47a9bff Fix the tail ends of statistic channels on PRS1.
The last statistics events in each slice are now correctly imported.

Previously, in the surprising edge case where two statistic periods are
reported with the same end-of-slice timestamp, they were both being duplicated
when marking the end of the slice.

Also, there were scattered instances where the final statistics in a slice
weren't being imported at all or were being imported incorrectly. These are
now fixed as well.
2020-01-06 21:45:52 -05:00
sawinglogz
97c7a4f557 Update PRS1 test YAML to emit first and last N/2 samples instead of first N, allowing for regression testing of end-of-session edge cases. 2020-01-05 16:02:04 -05:00
sawinglogz
26a844c720 Add infrastructure to allow PRS1 loader to alert the user when it encounters unexpected data.
Only the tests currently react to this information.
2020-01-04 20:47:28 -05:00
sawinglogz
e380b408fd Remove warnings about PRS1 oximetry being untested.
Also fine-tune various warnings for weird data, such as truncated
chunks and multiple sessions in a waveform file.
2019-12-02 17:30:28 -05:00
sawinglogz
06adbc1e72 Mark any PRS1 sessions with empty slices as summary and skip event or waveform data.
If there are no mask-on slices of nonzero duration, then there's not any
meaningful event or waveform data for the session. There is occasionally some
fragmentary data, but it's always less than 1 second.

When such fragmentary waveform data is present, it only contains 1-3 nonzero
samples, corresponding to 0.2s - 0.6s of data, which suggests that the
mask-on slice was really that long rather than precisely 0.  As a result,
it appears that the timestamps of the mask-on/mask-off slices are just the
current value of the machine's internal clock, which only has 1-second
resolution.

But rather than embark on herculean efforts to derive a sub-second slice
duration from (only occasionally present) event or waveform data, we just
treat the session as having no detailed data.
2019-11-13 20:44:35 -05:00
sawinglogz
1934c2c44e Use PRS1 summary start & end as session start & end.
Because summaries used to be parsed incorrectly, there was a bunch of ugly
logic that was designed to infer the session start & end times from other data.

Now that the summary parsers work, that can all go away. The only change to
imported data is that sessions ending with the mask off are now longer, to
reflect that extra time before the machine was turned off.
2019-11-13 11:25:59 -05:00
sawinglogz
de73d3756c Import and graph unknown PRS1_0E spans.
Also clean up unused PRS1 channels and fix a regression from
9a25647c that broke unintentional leak calculation for CPAP/APAP.

Also add PRS1PressureAverageEvent to F0V4 list of supported events.
2019-10-29 14:06:57 -04:00
sawinglogz
9a25647c25 Add initial support for PRS1 settings channel (as distinct from statistics).
Right now this results in slightly confusing graphs, since sometimes
the IPAP/EPAP data for a machine is primarily reported by its settings
events, and for other machines by its statistics events. Also, the
"average" pressure on F0 looks like it might be effectivley EPAP in
single-pressure mode rather than the true average in bi-level mode.

Once we decide on the best presentation, we can either update the importer
or the display to show the most helpful channels for a given session.
2019-10-29 11:14:57 -04:00
sawinglogz
3e42703399 Update PRS1 tests to allow for session chunks to be split between files.
Also warn when waveform files are being skipped on import due to this
kind of splitting.

The chunks YAML now emits all unique chunks found in files with the
same session ID.

Note that a single file can contain multiple chunks covering multiple
sessions. These will all be saved in the YAML file corresponding to the
original file's name, rather than the session ID encoded in any chunk.

This slight discrepancy is intentional, since the chunk YAML is meant
to test the parsers, to verify that they correctly decode a specific
input file. When importing data into a session, we use the actual
session ID specified by each chunk. Thus the session YAML files will
be derived from the proper chunks, regardless of their original
containing file. (Well, except for waveforms, but they don't appear
to have more than one session ID per file.)
2019-10-25 18:02:02 -04:00
sawinglogz
8297760fa8 Update PRS1 ParseComplianceF0V23 to use the same event loop structure as ParseSummaryF0V23.
No change in functionality.
2019-10-24 11:44:47 -04:00
sawinglogz
42948b2d3c Check duplicate PRS1 chunks on import to confirm that they are identical, warn if not. 2019-10-10 10:34:36 -04:00
sawinglogz
6ee83576b2 Clean up F3V3 summary and event parsing.
F3V3 is unusual. Its events are recorded at fixed intervals like a waveform.
Its summary is recorded with absolute timestamps. Slices are each given their
own chunks in the event file.

This last oddity isn't yet handled.

While examining this, a few other importing issues have been cleaned up:
PRS1DataChunk::ParseEvents no longer needs the mode passed in as an argument,
F5V012 importers should quietly eat the newly parsed pressure
adjustment events until we can import both those and average pressure
statistics, and F5V012 importers should handle real VS events and treat
VS statistics like the other importers do.
2019-10-09 13:35:02 -04:00
sawinglogz
f01ea9b165 Improve PRS1 F3V3 (1061T, 1160P) parsing.
Import is still not working correctly, but the parsing now seems
correct, as far as we can verify it at this point.
2019-10-09 10:24:29 -04:00
sawinglogz
a95429763d Update ParseEventsF0V23 for unknown event 0.
It also turns out that every sample machine that claims to be F0V3 in its
property file contains only F0V2 data, so there appears to be nothing
additional to test, but now there are more warnings in case we ever do
actually encounter F0V3 data.

Also warn if we ever encounter oximetry.
2019-10-04 12:08:16 -04:00
sawinglogz
4b5cdb8192 Add support for new Time Elapsed event in ParseSummaryF0V4.
Still trying to figure out timestamp event.

Other summary parsers will need review, since there was an initial
filter that was dropping sessions that began with event 5 or 6,
now commented out.
2019-09-30 10:23:28 -04:00
sawinglogz
21f61d7527 Add Flex mode setting for DreamStation 200X-700X machines. 2019-09-20 15:38:14 -04:00
sawinglogz
d45c9f1449 Fix tests broken by 67ef9f29. 2019-07-13 09:59:57 -04:00
sawinglogz
c1aa016a46 Add trivial unit tests for ResMed loader. 2019-07-10 12:33:00 -04:00
sawinglogz
a66dd145b8 Add support for 500X summary data.
This one's slice 8 is shorter than anything else we've seen before!

Also add support for a new slice type and noted possible values
for other data, including a possible lead on the CPAP mode.
2019-06-10 14:30:50 -04:00
sawinglogz
c93932664c Use decimal session IDs for chunk YAML file names, add original file path to YAML. 2019-06-07 21:12:55 -04:00
sawinglogz
250566f3f2 Refinement of 200X compliance data.
The new slice type appears when humidifier settings have changed during
the session, and includes a timestamp. The session time now matches
reports.

Otherwise just comments to indicate other values seen in the sample data,
including a lead on humidifier encoding.
2019-06-07 16:03:20 -04:00
sawinglogz
7a00009a56 Add result of parsing/importing to PRS1 chunk and session YAML. 2019-06-06 16:50:40 -04:00
sawinglogz
330bdb6fb3 Split ParseCompliance into F0V23 and F0V6.
Also add some debug messages to FV3 parsing. It's clear the current
approach is wrong. This looks a lot like the slices seen earlier,
since hbdata values appear more than once in a given file.

Also turn off summary YAML since the next bit of work will focus on
parsing.
2019-06-06 16:08:40 -04:00
sawinglogz
ce38fbcdde Restore session end time to previous behavior, with better logging and documentation.
It turns out the session end time was intentionally not being set in ParseSummary,
probably due to its unreliability. This may be revisited once things are more
stable, but for now the old behavior is retained.
2019-06-05 17:08:45 -04:00
sawinglogz
8fa5df5f89 Fix PRS1 typo, resolve use of multiple event lists and refine warning. 2019-06-05 10:00:11 -04:00
sawinglogz
27c169e61e Report parsing failure when PRS1 sanity checks fail.
Remarkably, this resulted in nearly no changes to the test output.
Only one session with 0 duration had its start/end times reset to 0,
since it will no longer get imported.
2019-06-03 22:01:02 -04:00
sawinglogz
26f6e15a75 Add YAML output for session slices. 2019-06-03 20:56:40 -04:00
sawinglogz
1a0a4bbf52 Convert compliance "slices" to events with a starting delta.
Also fix the related enums and add more value checks.
Also add YAML output of the cumulative mask-on slice time.
2019-06-03 20:12:17 -04:00
sawinglogz
a327a7ed1c Add logging of unexpected data to ParseCompliance, disable broken 200X compliance. 2019-05-31 16:58:58 -04:00
sawinglogz
135ac25c1e Add YAML output for PRS1DataChunks.
Also move a data check from PRS1Import::ImportSummary to PRS1DataChunk::ParseSummary
to prevent crashing in regression tests.
2019-05-29 12:11:53 -04:00
sawinglogz
d0150d18ef Limit raw data in PRS1/Session YAML to 100 bytes per entry.
This changes the reference output, compared to prior versions, but
it runs much faster and doesn't affect user-observable behavior.
2019-05-28 21:09:17 -04:00
sawinglogz
e3a4edaca2 Add PRS1ModelInfo to manage the set of supported and tested machines.
Also move an extra unsupported check out of PRSImport::ImportSummary
into CreateMachineFromProperties, where it should intervene before
reaching PRS1Import. Leave a warning debug message in its place.
2019-05-27 10:05:16 -04:00