From 48968a8ad584cde278eabad268eed760d3d7d706 Mon Sep 17 00:00:00 2001 From: Jeremy Stein Date: Mon, 2 Dec 2024 09:53:47 +0000 Subject: [PATCH] Make data more realistic by not enabling all streams for all patients. --- .../waveform_generator/Hl7Generator.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/waveform-generator/src/main/java/uk/ac/ucl/rits/inform/datasources/waveform_generator/Hl7Generator.java b/waveform-generator/src/main/java/uk/ac/ucl/rits/inform/datasources/waveform_generator/Hl7Generator.java index 4336566a3..155a3b432 100644 --- a/waveform-generator/src/main/java/uk/ac/ucl/rits/inform/datasources/waveform_generator/Hl7Generator.java +++ b/waveform-generator/src/main/java/uk/ac/ucl/rits/inform/datasources/waveform_generator/Hl7Generator.java @@ -295,17 +295,27 @@ public List makeSyntheticWaveformMsgsAllPatients( Instant startTime, long numPatients, long numMillis) { List waveformMsgs = new ArrayList<>(); numPatients = Math.min(numPatients, possibleLocations.size()); + List syntheticStreams = List.of( + new SyntheticStream("52912", 50, 0.3, 5), // airway volume + new SyntheticStream("27", 300, 1.2, 10) // ECG + ); for (int p = 0; p < numPatients; p++) { var location = possibleLocations.get(p); - String streamId1 = "52912"; // airway volume - String streamId2 = "27"; // ECG int sizeBefore = waveformMsgs.size(); // each bed has a slightly different frequency double frequencyFactor = 0.95 + 0.1 * p / possibleLocations.size(); - waveformMsgs.addAll(makeSyntheticWaveformMsgs( - location, streamId1, 50, 0.3 * frequencyFactor, numMillis, startTime, 5)); - waveformMsgs.addAll(makeSyntheticWaveformMsgs( - location, streamId2, 300, 1.2 * frequencyFactor, numMillis, startTime, 10)); + // don't turn on all streams for all patients to test more realistically + long streamsEnabledBitPattern = ~p; // p = 0 has all streams enabled, etc + for (int si = 0; si < syntheticStreams.size(); si++) { + boolean thisStreamEnabled = 0 != ((streamsEnabledBitPattern >> si) & 1); + if (!thisStreamEnabled) { + continue; + } + SyntheticStream stream = syntheticStreams.get(si); + waveformMsgs.addAll(makeSyntheticWaveformMsgs( + location, stream.streamId, stream.samplingRate, + stream.baselineSignalFrequency * frequencyFactor, numMillis, startTime, stream.maxSamplesPerMessage)); + } int sizeAfter = waveformMsgs.size(); logger.debug("Patient {} (location {}), generated {} messages", p, location, sizeAfter - sizeBefore); } @@ -313,6 +323,9 @@ public List makeSyntheticWaveformMsgsAllPatients( return waveformMsgs; } + record SyntheticStream(String streamId, int samplingRate, double baselineSignalFrequency, int maxSamplesPerMessage) { + } + private class GeneratorContext { private final Map, GeneratorContextRecord> allContexts = new HashMap<>();