From d5b8d5e88da23ef5c69479fa49ae2e92897020f9 Mon Sep 17 00:00:00 2001 From: Rachel Clipp Date: Fri, 11 Mar 2022 13:10:01 -0500 Subject: [PATCH 001/115] Updates to patient validation sheet for patient specific configurations. This will break validation without additional code to read and compare with the new columns and rows. --- .../validation/SystemValidationData.xlsx | Bin 89775 -> 91398 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/human/adult/validation/SystemValidationData.xlsx b/data/human/adult/validation/SystemValidationData.xlsx index a5fec4182663530b231d919015fa79a8542ed9ca..430685da12f9cf0f3bbd1eb6d0073c75152cd727 100644 GIT binary patch delta 74441 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 z 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 JOPsd={s*rE9Pt1E delta 72896 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 -- GitLab From 13392f25b42d8ef58ee45d89b564440c00470139 Mon Sep 17 00:00:00 2001 From: Rachel Clipp Date: Thu, 17 Mar 2022 17:04:23 -0400 Subject: [PATCH 002/115] Updates to respiratory and blood chemistry sheets. --- .../validation/SystemValidationData.xlsx | Bin 91398 -> 93257 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/human/adult/validation/SystemValidationData.xlsx b/data/human/adult/validation/SystemValidationData.xlsx index 430685da12f9cf0f3bbd1eb6d0073c75152cd727..e38e79fcc708f6cfa7bdce0bd61ebf7abf44068f 100644 GIT binary patch delta 74138 zcmZ6xb9g1q);=6gY#S4MVoYq?wr%c-ZQI(hC$?=nlT19ZlV9d}&N<)pz5i5SwR_=S z_gbsEs&|KsL5{9K*1|yn@F61@_rXCxYG6P>kU&5{JZu=)NJhw zIg#J}=H8$N++h#NVakrJZu)eKn88q#{+fU#&5p%Gn`M|2j6H{?m3pQUBJpX{B9iH)1s!NugjA+%mL0j>Vk`|W z=tcH0@qAi~U~sOA#w7Fa#UKnd{9l+0i)|`@jnW@F(eVN2q&)Nj!XZsn&aDbd;wfkM zfjeM~*g>75{&g6DKc_uJTueVFC2L(>Rpiim$@PIeOtzQVT@gfF>_X<$D|$ye?9yHI zBNx1L!rD37zeLiH$kcarl zB$Jw=#7HzrIR60_RpYjABno#8Wc56vR`bYF|m}-9L?ZB4Qm1 zpNd8pU4^Oz0J>z*2S^G+fN13K9)9?|pgJ`k2s@ynbHcX#VBDSd+ryiVjBa0MLTB=< zp9I}4f}x}7SzUO*83`W({+uF(3Aq#m?Ms_<#T4A{s8N#LFhf^ee&nTl8-It;1o>rqfTm-W?BL zj)*p!FHtuO*kDKHDn?MU`VW=}U|9^LzG)sZr%IL;2z3(F`o`%h@R2Dgc+Cqs*>%lp z*iK2%fIJIn@I3CEeO+4QIxFvAf_pK0@5PTqKe~3%Ba~^h3@l)V9r8BhBYKPX;83jf zdbJP8E}ITczsw+-NHJ8l1huCQm5QXO7z|EdpMtIpOL(Pnv(T6>$|WujeXWeF?q%tv z^M5b?3;~@K%HYSssTdbIOz6WaA_N5WHw<}vfHg^{eDjGU@ENfx7_8=tp#6?VzV*|$ z2zsL67&dGdA6o1|y&2KMUCuDq)nj)+<02&k|LUB#Ta|1rFmLl%PJQ|-?@;LC{+?5} z!_JwecSOlof-%9DZV3I|^^kbH;Qban$WX@Vh9f-F+@S{hOULNVZZT_c;u!%vjk7~- z@Y7wα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 delta 72248 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 z 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⁣jKGU`*qKBads;xnl;_sO`UeJJ)Z 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 -- GitLab From 2736920302845134d22c3e1d9ac5665f009361c7 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Thu, 24 Mar 2022 16:14:45 -0500 Subject: [PATCH 003/115] initial patient variability study set up --- .../study/patient_variability/CMakeLists.txt | 18 ++ .../study/patient_variability/PVRunner.cpp | 269 ++++++++++++++++++ src/cpp/study/patient_variability/PVRunner.h | 55 ++++ src/cpp/study/patient_variability/main.cpp | 11 + .../pulse/study/bind/PatientVariability.proto | 57 ++++ 5 files changed, 410 insertions(+) create mode 100644 src/cpp/study/patient_variability/CMakeLists.txt create mode 100644 src/cpp/study/patient_variability/PVRunner.cpp create mode 100644 src/cpp/study/patient_variability/PVRunner.h create mode 100644 src/cpp/study/patient_variability/main.cpp create mode 100644 src/schema/pulse/study/bind/PatientVariability.proto diff --git a/src/cpp/study/patient_variability/CMakeLists.txt b/src/cpp/study/patient_variability/CMakeLists.txt new file mode 100644 index 00000000..9a0809ea --- /dev/null +++ b/src/cpp/study/patient_variability/CMakeLists.txt @@ -0,0 +1,18 @@ +add_library_ex(PatientVariabilityEngine + H_FILES + PVRunner.h + CPP_FILES + PVRunner.cpp + PUBLIC_DEPENDS + PulseEngine + PRIVATE_DEPENDS + protobuf::libprotobuf + INSTALL_HEADER_DIR + study/patient_variability + NO_INSTALL + ) +set_target_properties(PatientVariabilityEngine PROPERTIES FOLDER "Studies//PatientVariability") + +add_executable_ex(PatientVariabilityDriver main.cpp) +set_target_properties(PatientVariabilityDriver PROPERTIES FOLDER "Studies//PatientVariability") +target_link_libraries(PatientVariabilityDriver PatientVariabilityEngine protobuf::libprotobuf) \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp new file mode 100644 index 00000000..aee60035 --- /dev/null +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -0,0 +1,269 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#include "PVRunner.h" + +#include "PulseConfiguration.h" + +namespace pulse::study::patient_variability +{ + PVRunner::PVRunner(const std::string& logfileName, const std::string& dataDir) : Loggable(logfileName) + { + m_DataDir = dataDir; + m_SimulationList = nullptr; + m_SimulationResultsList = nullptr; + } + PVRunner::~PVRunner() + { + SAFE_DELETE(m_SimulationList); + SAFE_DELETE(m_SimulationResultsList); + } + + bool PVRunner::Run(pulse::study::bind::patient_variability::SimulationListData& simList) + { + m_OutDir = simList.outputrootdir(); + m_SimulationResultsListFile = m_OutDir + "/simlist_results.json"; + SAFE_DELETE(m_SimulationList); + SAFE_DELETE(m_SimulationResultsList); + m_SimulationList = &simList; + m_SimulationResultsList = new pulse::study::bind::patient_variability::SimulationListData(); + if (FileExists(m_SimulationResultsListFile)) + { + if (!SerializeFromFile(m_SimulationResultsListFile, *m_SimulationResultsList, eSerializationFormat::JSON)) + { + GetLogger()->Warning("Unable to read found results file"); + } + } + bool b = Run(); + m_SimulationList = nullptr; + SAFE_DELETE(m_SimulationResultsList); + return b; + } + + bool PVRunner::Run(const std::string& filename, eSerializationFormat f) + { + SAFE_DELETE(m_SimulationList); + SAFE_DELETE(m_SimulationResultsList); + m_SimulationList = new pulse::study::bind::patient_variability::SimulationListData(); + m_SimulationResultsList = new pulse::study::bind::patient_variability::SimulationListData(); + + if (!SerializeFromFile(filename, *m_SimulationList, f)) + return false; + // Let's try to read in a results file + m_OutDir = m_SimulationList->outputrootdir(); + m_SimulationResultsListFile = m_OutDir + "/simlist_results.json"; + if (FileExists(m_SimulationResultsListFile)) + { + if (!SerializeFromFile(m_SimulationResultsListFile, *m_SimulationResultsList, f)) + { + GetLogger()->Warning("Unable to read found results file"); + } + } + return Run(); + } + bool PVRunner::Run() + { + TimingProfile profiler; + profiler.Start("Total"); + + // Ensure our output dir exists + CreatePath(m_OutDir); + + // Get the ID's of simulations we need to run + m_SimulationsToRun.clear(); + for (int i = 0; i < m_SimulationList->simulation_size(); i++) + m_SimulationsToRun.insert(m_SimulationList->simulation()[i].id()); + // Remove any id's we have in the results + if (m_SimulationResultsList->simulation_size() > 0) + { + Info("Found " + std::to_string(m_SimulationResultsList->simulation_size()) + " previously run simulations"); + for (int i = 0; i < m_SimulationResultsList->simulation_size(); i++) + m_SimulationsToRun.erase(m_SimulationResultsList->simulation()[i].id()); + } + + int numSimsToRun = m_SimulationList->simulation_size() - m_SimulationResultsList->simulation_size(); + if (numSimsToRun == 0) + { + Info("All simulations are run in the results file"); + return true; + } + size_t processor_count = std::thread::hardware_concurrency(); + if (processor_count == 0) + { + Fatal("Unable to detect number of processors"); + return false; + } + // Let's not kill the computer this is running on... + if (processor_count > 1) + processor_count -= 1; + // Let's not kick off more threads than we need + if (processor_count > numSimsToRun) + processor_count = numSimsToRun; + Info("Starting " + std::to_string(processor_count) + " Threads to run " + std::to_string(m_SimulationsToRun.size()) + " simulations"); + // Crank up our threads + for (size_t p = 0; p < processor_count; p++) + m_Threads.push_back(std::thread(&PVRunner::ControllerLoop, this)); + + for (size_t p = 0; p < processor_count; p++) + m_Threads[p].join(); + + Info("It took " + cdm::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this simulation list"); + profiler.Clear(); + return true; + } + + void PVRunner::ControllerLoop() + { + pulse::study::bind::patient_variability::SimulationData* sim = nullptr; + while (true) + { + try + { + sim = GetNextSimulation(); + if (sim == nullptr) + break; + RunSimulationUntilStable(m_OutDir, *sim); + FinalizeSimulation(*sim); + } + catch (CommonDataModelException& cdm_ex) + { + GetLogger()->Fatal("Exception caught runnning simulation " + sim->name()); + GetLogger()->Fatal(cdm_ex.what()); + std::cerr << cdm_ex.what() << std::endl; + } + catch (std::exception ex) + { + GetLogger()->Fatal("Exception caught runnning simulation " + sim->name()); + GetLogger()->Fatal(ex.what()); + std::cerr << ex.what() << std::endl; + } + catch (...) + { + std::cerr << "Unable to run simulation " << sim->name() << std::endl; + } + } + } + + bool PVRunner::RunSimulationUntilStable(std::string const& outDir, pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir) + { + TimingProfile profiler; + profiler.Start("Total"); + profiler.Start("Status"); + + auto pulse = CreatePulseEngine(); + pulse->GetLogger()->SetLogFile(outDir + "/" + std::to_string(sim.id()) + " - " + sim.name() + ".log"); + + // No logging to console (when threaded) + pulse->GetLogger()->LogToConsole(false); + // Setup data requests + //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("CardiacOutput", VolumePerTimeUnit::mL_Per_min); + //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("BloodVolume", VolumeUnit::mL); + //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("HeartRate", FrequencyUnit::Per_min); + //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("MeanArterialPressure", PressureUnit::mmHg); + //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("IntracranialPressure", PressureUnit::mmHg); + //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("CerebralPerfusionPressure", PressureUnit::mmHg); + //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "Pressure", PressureUnit::mmHg); + //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "Volume", VolumeUnit::mL); + //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "InFlow", VolumePerTimeUnit::mL_Per_min); + //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "Oxygen", "PartialPressure"); + //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::CerebrospinalFluidCompartment::IntracranialSpace, "Volume", VolumeUnit::mL); + //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::CerebrospinalFluidCompartment::IntracranialSpace, "Pressure", PressureUnit::mmHg); + //pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(outDir + "/" + std::to_string(sim.id()) + " - " + sim.name() + ".csv"); + + // Stabilize the engine + SEPatientConfiguration pc; + pc.SetPatientFile("./patients/StandardMale.json"); + if (!pulse->InitializeEngine(pc)) + { + sim.set_achievedstabilization(false); + sim.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); + sim.set_totalsimulationtime_s(0); + return false; + } + + pulse->GetLogger()->Info("It took " + cdm::to_string(sim.stabilizationtime_s()) + "s to run this simulation"); + + profiler.Clear(); + return true; + } + + pulse::study::bind::patient_variability::SimulationData* PVRunner::GetNextSimulation() + { + m_mutex.lock(); + pulse::study::bind::patient_variability::SimulationData* sim = nullptr; + if (!m_SimulationsToRun.empty()) + { + auto id = *m_SimulationsToRun.begin(); + for (int i = 0; i < m_SimulationList->simulation_size(); i++) + { + sim = &(*m_SimulationList->mutable_simulation())[i]; + if (sim->id() == id) + break; + } + Info("Simulating Run " + std::to_string(id) + " : " + sim->name()); + m_SimulationsToRun.erase(id); + } + m_mutex.unlock(); + return sim; + } + + void PVRunner::FinalizeSimulation(pulse::study::bind::patient_variability::SimulationData& sim) + { + m_mutex.lock(); + auto rSim = m_SimulationResultsList->mutable_simulation()->Add(); + rSim->CopyFrom(sim); + SerializeToFile(*m_SimulationResultsList, m_SimulationResultsListFile, eSerializationFormat::JSON); + Info("Completed Simulation " + std::to_string(m_SimulationResultsList->simulation_size()) + " of " + std::to_string(m_SimulationList->simulation_size())); + if (sim.achievedstabilization()) + Info(" Stabilized Run " + std::to_string(sim.id()) + " : " + sim.name()); + else + Info(" FAILED STABILIZATION FOR RUN " + std::to_string(sim.id()) + " : " + sim.name()); + m_mutex.unlock(); + } + + bool PVRunner::SerializeToString(pulse::study::bind::patient_variability::SimulationListData& src, std::string& output, eSerializationFormat f) const + { + google::protobuf::util::JsonPrintOptions printOpts; + printOpts.add_whitespace = true; + printOpts.preserve_proto_field_names = true; + printOpts.always_print_primitive_fields = true; + if (!google::protobuf::util::MessageToJsonString(src, &output, printOpts).ok()) + { + Error("Unable to serialize simulation list"); + return false; + } + return true; + } + bool PVRunner::SerializeToFile(pulse::study::bind::patient_variability::SimulationListData& src, const std::string& filename, eSerializationFormat f) const + { + std::string content; + if (!SerializeToString(src, content, f)) + return false; + return WriteFile(content, filename); + } + bool PVRunner::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f) + { + google::protobuf::util::JsonParseOptions parseOpts; + google::protobuf::SetLogHandler([](google::protobuf::LogLevel level, const char* filename, int line, const std::string& message) + { + std::cout << "[" << level << "] " << filename << "::" << line << " " << message; + }); + google::protobuf::util::Status stat = google::protobuf::util::JsonStringToMessage(src, &dst, parseOpts); + if (!stat.ok()) + { + Error("Unable to parse json in string : " + stat.ToString()); + return false; + } + return true; + } + bool PVRunner::SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f) + { + std::string content; + if (ReadFile(filename, content)) + { + Error("Unable to read file " + filename); + return false; + } + return SerializeFromString(content, dst, f); + } +} \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h new file mode 100644 index 00000000..c8b690fc --- /dev/null +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -0,0 +1,55 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#pragma once + +#include +#include "PulseEngine.h" + +#include "cdm/engine/SEPatientConfiguration.h" +#include "cdm/utils/FileUtils.h" +#include "cdm/utils/TimingProfile.h" + +#include "cdm/io/protobuf/PBActions.h" +PUSH_PROTO_WARNINGS +#include "pulse/study/bind/PatientVariability.pb.h" +#include +#include +POP_PROTO_WARNINGS + +namespace pulse::study::patient_variability +{ + class PVRunner : public Loggable + { + public: + PVRunner(const std::string& logfileName, const std::string& dataDir = "."); + virtual ~PVRunner(); + + bool Run(const std::string& filename, eSerializationFormat f); + bool Run(pulse::study::bind::patient_variability::SimulationListData& simList); + + bool RunSimulationUntilStable(std::string const& outDir, pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir = "./"); + + protected: + bool Run(); + bool SerializeToString(pulse::study::bind::patient_variability::SimulationListData& src, std::string& dst, eSerializationFormat f) const; + bool SerializeToFile(pulse::study::bind::patient_variability::SimulationListData& src, const std::string& filename, eSerializationFormat f) const; + bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f); + bool SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f); + + void ControllerLoop(); + void FinalizeSimulation(pulse::study::bind::patient_variability::SimulationData& sim); + pulse::study::bind::patient_variability::SimulationData* GetNextSimulation(); + + std::mutex m_mutex; + bool m_Running; + + std::string m_OutDir; + std::string m_DataDir; + std::string m_SimulationResultsListFile; + std::set m_SimulationsToRun; + std::vector m_Threads; + pulse::study::bind::patient_variability::SimulationListData* m_SimulationList; + pulse::study::bind::patient_variability::SimulationListData* m_SimulationResultsList; + }; +} \ No newline at end of file diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp new file mode 100644 index 00000000..7fa73e03 --- /dev/null +++ b/src/cpp/study/patient_variability/main.cpp @@ -0,0 +1,11 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#include "PVRunner.h" + +using namespace pulse::study::patient_variability; + +int main(int argc, char* argv[]) +{ + return 0; +} \ No newline at end of file diff --git a/src/schema/pulse/study/bind/PatientVariability.proto b/src/schema/pulse/study/bind/PatientVariability.proto new file mode 100644 index 00000000..aa913cdd --- /dev/null +++ b/src/schema/pulse/study/bind/PatientVariability.proto @@ -0,0 +1,57 @@ +syntax = "proto3"; +package pulse.study.bind.patient_variability; +option java_package = "com.kitware.pulse.study.bind.patient_variability"; +option csharp_namespace = "pulse.study.bind.patient_variability"; +option optimize_for = SPEED; + +message SimulationData +{ + // Inputs + // A filename without an extension (can/should have path also) + // The engine will use this to create multiple output files (*.log and *.csv) + uint32 ID = 1; + string Name = 2; + double IntracranialSpaceVolumeBaseline_mL = 3; + double IntracranialSpaceCompliance_mL_Per_mmHg = 4; + double CerebrospinalFluidAbsorptionRate_mL_Per_min = 5; + double CerebrospinalFluidProductionRate_mL_Per_min = 6; + + // Outputs + double BrainVolume_mL = 7; + double IntracranialSpaceVolume_mL = 8; + double MeanBrainPressure_mmHg = 9; + double MeanBrainVasculatureInFlow_mL_Per_s = 10; + double MeanBrainVasculatureOutFlow_mL_Per_s = 11; + double MeanBrainCarbonDioxidePartialPressure_mmHg = 12; + double MeanBrainOxygenPartialPressure_mmHg = 13; + double MeanIntracranialSpacePressure_mmHg = 14; + // Some other system variable + double CardiacOutput_mL_Per_min = 15; + double CerebralBloodFlow_mL_Per_min = 16; + double CerebralPerfusionPressure_mmHg = 17; + double DiastolicArterialPressure_mmHg = 18; + double HeartEjectionFraction = 19; + double HeartRate_bpm = 20; + double HeartStrokeVolume_mL = 21; + double IntracranialPressure_mmHg = 22; + double MeanArterialPressure_mmHg = 23; + double MeanCentralVenousPressure_mmHg = 24; + double PulmonaryDiastolicArterialPressure_mmHg = 25; + double PulmonaryMeanArterialPressure_mmHg = 26; + double PulmonaryMeanCapillaryFlow_mL_Per_s = 27; + double PulmonarySystolicArterialPressure_mmHg = 28; + double SystolicArterialPressure_mmHg = 29; + double SystemicVascularResistance_mmHg_s_Per_L = 30; + + // Stabilization Information + bool AchievedStabilization = 31; + double StabilizationTime_s = 32; + double TotalSimulationTime_s = 33; + +} + +message SimulationListData +{ + string OutputRootDir = 1; + repeated SimulationData Simulation = 2; +} -- GitLab From 3a33a00aa91601a624a2a0365a9f67bfd55d06e1 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Tue, 29 Mar 2022 15:15:33 -0500 Subject: [PATCH 004/115] initial looping -- way too many patients --- src/cpp/CMakeLists.txt | 1 + src/cpp/study/patient_variability/main.cpp | 73 ++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index eecd63b9..fc157a5b 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -8,4 +8,5 @@ add_subdirectory(test_driver) add_subdirectory(study/circuit_optimization) add_subdirectory(study/hydrocephalus) add_subdirectory(study/multiplex_ventilation) +add_subdirectory(study/patient_variability) add_subdirectory(study/sensitivity_analysis) \ No newline at end of file diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp index 7fa73e03..e962e669 100644 --- a/src/cpp/study/patient_variability/main.cpp +++ b/src/cpp/study/patient_variability/main.cpp @@ -7,5 +7,78 @@ using namespace pulse::study::patient_variability; int main(int argc, char* argv[]) { + enum Sex { Female, Male }; + + unsigned int ageMin = 18; + unsigned int ageMax = 65; + unsigned int ageStep = 1; + + // Heights in inches + unsigned int heightMin_male = 65; + unsigned int heightMax_male = 73; + unsigned int heightMin_female = 60; + unsigned int heightMax_female = 67; + unsigned int heightStep = 1; + + double bmiMin = 18.5; + double bmiMax = 29; + double bmiStep = 0.1; + + unsigned int hrMin = 60; + unsigned int hrMax = 100; + unsigned int hrStep = 1; + + unsigned int mapMin = 70; + unsigned int mapMax = 100; + unsigned int mapStep = 1; + + unsigned int pulsePressureMin = 30; + unsigned int pulsePressureMax = 50; + unsigned int pulsePressureStep = 1; + + unsigned long long int num_scenarios = 0; + for( int sex = Female; sex <= Male; ++sex ) + { + // Adjust height range based on sex + unsigned int heightMin = heightMin_male; + unsigned int heightMax = heightMax_male; + if( sex == Female ) + { + heightMin = heightMin_female; + heightMax = heightMax_female; + } + + for( unsigned int age = ageMin; age <= ageMax; age += ageStep ) + { + for( unsigned int height = heightMin; height <= heightMax; height += heightStep ) + { + for( unsigned int bmi = bmiMin; bmi <= bmiMax; bmi += bmiStep ) + { + // Convert height to meters + double height_meters = height * 0.0254; + + // Caclulate weight (kg) from height and BMI + double weight = bmi * height_meters * height_meters; + + for( unsigned int hr = hrMin; hr <= hrMax; hr += hrStep ) + { + for( unsigned int map = mapMin; map <= mapMax; map += mapStep ) + { + for( unsigned int pp = pulsePressureMin; pp <= pulsePressureMax; pp += pulsePressureStep ) + { + double diastolic = pp - 3 * map; + double systolic = pp - diastolic; + num_scenarios++; + std::cout << "Scenario #" << num_scenarios << std::endl; + } + } + } + } + } + } + } + + std::cout << "Number scenarios: " << num_scenarios << std::endl; + return 0; } \ No newline at end of file -- GitLab From 9b4470afe14929bd1ddbb2aac764d49883627e0b Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Fri, 1 Apr 2022 09:22:32 -0500 Subject: [PATCH 005/115] switch over to multiplex ventilation structure, main empty, proto issues --- .../study/patient_variability/PVRunner.cpp | 79 +++++++-------- src/cpp/study/patient_variability/PVRunner.h | 20 +--- src/cpp/study/patient_variability/main.cpp | 75 +------------- .../pulse/study/bind/PatientVariability.proto | 98 +++++++++++-------- 4 files changed, 97 insertions(+), 175 deletions(-) diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index aee60035..9213ca94 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -3,7 +3,7 @@ #include "PVRunner.h" -#include "PulseConfiguration.h" +using namespace pulse; namespace pulse::study::patient_variability { @@ -19,10 +19,9 @@ namespace pulse::study::patient_variability SAFE_DELETE(m_SimulationResultsList); } - bool PVRunner::Run(pulse::study::bind::patient_variability::SimulationListData& simList) + bool PVRunner::Run(pulse::study::bind::patient_variability::SimulationListData& simList, const std::string& resultsFilename) { - m_OutDir = simList.outputrootdir(); - m_SimulationResultsListFile = m_OutDir + "/simlist_results.json"; + m_SimulationResultsListFile = simList.outputrootdir() + "/" + resultsFilename; SAFE_DELETE(m_SimulationList); SAFE_DELETE(m_SimulationResultsList); m_SimulationList = &simList; @@ -47,14 +46,13 @@ namespace pulse::study::patient_variability m_SimulationList = new pulse::study::bind::patient_variability::SimulationListData(); m_SimulationResultsList = new pulse::study::bind::patient_variability::SimulationListData(); - if (!SerializeFromFile(filename, *m_SimulationList, f)) + if (!SerializeFromFile(filename, *m_SimulationList, eSerializationFormat::JSON)) return false; // Let's try to read in a results file - m_OutDir = m_SimulationList->outputrootdir(); - m_SimulationResultsListFile = m_OutDir + "/simlist_results.json"; + m_SimulationResultsListFile = filename.substr(0, filename.length() - 5) + "_results.json"; if (FileExists(m_SimulationResultsListFile)) { - if (!SerializeFromFile(m_SimulationResultsListFile, *m_SimulationResultsList, f)) + if (!SerializeFromFile(m_SimulationResultsListFile, *m_SimulationResultsList, eSerializationFormat::JSON)) { GetLogger()->Warning("Unable to read found results file"); } @@ -66,22 +64,19 @@ namespace pulse::study::patient_variability TimingProfile profiler; profiler.Start("Total"); - // Ensure our output dir exists - CreatePath(m_OutDir); - // Get the ID's of simulations we need to run m_SimulationsToRun.clear(); - for (int i = 0; i < m_SimulationList->simulation_size(); i++) - m_SimulationsToRun.insert(m_SimulationList->simulation()[i].id()); + for (int i = 0; i < m_SimulationList->simulations_size(); i++) + m_SimulationsToRun.insert(m_SimulationList->simulations()[i].id()); // Remove any id's we have in the results - if (m_SimulationResultsList->simulation_size() > 0) + if (m_SimulationResultsList->simulations_size() > 0) { - Info("Found " + std::to_string(m_SimulationResultsList->simulation_size()) + " previously run simulations"); - for (int i = 0; i < m_SimulationResultsList->simulation_size(); i++) - m_SimulationsToRun.erase(m_SimulationResultsList->simulation()[i].id()); + Info("Found " + std::to_string(m_SimulationResultsList->simulations_size()) + " previously run simulations"); + for (int i = 0; i < m_SimulationResultsList->simulations_size(); i++) + m_SimulationsToRun.erase(m_SimulationResultsList->simulations()[i].id()); } - int numSimsToRun = m_SimulationList->simulation_size() - m_SimulationResultsList->simulation_size(); + size_t numSimsToRun = m_SimulationList->simulations_size() - m_SimulationResultsList->simulations_size(); if (numSimsToRun == 0) { Info("All simulations are run in the results file"); @@ -107,7 +102,7 @@ namespace pulse::study::patient_variability for (size_t p = 0; p < processor_count; p++) m_Threads[p].join(); - Info("It took " + cdm::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this simulation list"); + Info("It took " + std::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this simulation list"); profiler.Clear(); return true; } @@ -122,36 +117,36 @@ namespace pulse::study::patient_variability sim = GetNextSimulation(); if (sim == nullptr) break; - RunSimulationUntilStable(m_OutDir, *sim); + RunSimulationUntilStable(*sim); FinalizeSimulation(*sim); } catch (CommonDataModelException& cdm_ex) { - GetLogger()->Fatal("Exception caught runnning simulation " + sim->name()); + GetLogger()->Fatal("Exception caught runnning simulation " + sim->outputbasefilename()); GetLogger()->Fatal(cdm_ex.what()); std::cerr << cdm_ex.what() << std::endl; } - catch (std::exception ex) + catch (std::exception& ex) { - GetLogger()->Fatal("Exception caught runnning simulation " + sim->name()); + GetLogger()->Fatal("Exception caught runnning simulation " + sim->outputbasefilename()); GetLogger()->Fatal(ex.what()); std::cerr << ex.what() << std::endl; } catch (...) { - std::cerr << "Unable to run simulation " << sim->name() << std::endl; + std::cerr << "Unable to run simulation " << sim->outputbasefilename() << std::endl; } } } - bool PVRunner::RunSimulationUntilStable(std::string const& outDir, pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir) + bool PVRunner::RunSimulationUntilStable(pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir) { TimingProfile profiler; profiler.Start("Total"); profiler.Start("Status"); auto pulse = CreatePulseEngine(); - pulse->GetLogger()->SetLogFile(outDir + "/" + std::to_string(sim.id()) + " - " + sim.name() + ".log"); + pulse->GetLogger()->SetLogFile(sim.outputbasefilename() + ".log"); // No logging to console (when threaded) pulse->GetLogger()->LogToConsole(false); @@ -177,7 +172,6 @@ namespace pulse::study::patient_variability { sim.set_achievedstabilization(false); sim.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); - sim.set_totalsimulationtime_s(0); return false; } @@ -194,13 +188,13 @@ namespace pulse::study::patient_variability if (!m_SimulationsToRun.empty()) { auto id = *m_SimulationsToRun.begin(); - for (int i = 0; i < m_SimulationList->simulation_size(); i++) + for (int i = 0; i < m_SimulationList->simulations_size(); i++) { - sim = &(*m_SimulationList->mutable_simulation())[i]; + sim = &(*m_SimulationList->mutable_simulations())[i]; if (sim->id() == id) break; } - Info("Simulating Run " + std::to_string(id) + " : " + sim->name()); + Info("Simulating Run " + std::to_string(id)); m_SimulationsToRun.erase(id); } m_mutex.unlock(); @@ -210,14 +204,18 @@ namespace pulse::study::patient_variability void PVRunner::FinalizeSimulation(pulse::study::bind::patient_variability::SimulationData& sim) { m_mutex.lock(); - auto rSim = m_SimulationResultsList->mutable_simulation()->Add(); + auto rSim = m_SimulationResultsList->mutable_simulations()->Add(); rSim->CopyFrom(sim); SerializeToFile(*m_SimulationResultsList, m_SimulationResultsListFile, eSerializationFormat::JSON); - Info("Completed Simulation " + std::to_string(m_SimulationResultsList->simulation_size()) + " of " + std::to_string(m_SimulationList->simulation_size())); + Info("Completed Simulation " + std::to_string(m_SimulationResultsList->simulations_size()) + " of " + std::to_string(m_SimulationList->simulations_size())); if (sim.achievedstabilization()) - Info(" Stabilized Run " + std::to_string(sim.id()) + " : " + sim.name()); + Info(" Stabilized Run " + std::to_string(sim.id())); else - Info(" FAILED STABILIZATION FOR RUN " + std::to_string(sim.id()) + " : " + sim.name()); + Info(" FAILED STABILIZATION FOR RUN " + std::to_string(sim.id())); + std::ofstream plots; + plots.open(m_SimulationList->outputrootdir() + "/plot_pairs.config", std::fstream::in | std::fstream::out | std::fstream::app); + plots << sim.outputbasefilename() << "multiplex_patient_0_results.csv, " << sim.outputbasefilename() << "multiplex_patient_1_results.csv\n"; + plots.close(); m_mutex.unlock(); } @@ -236,10 +234,7 @@ namespace pulse::study::patient_variability } bool PVRunner::SerializeToFile(pulse::study::bind::patient_variability::SimulationListData& src, const std::string& filename, eSerializationFormat f) const { - std::string content; - if (!SerializeToString(src, content, f)) - return false; - return WriteFile(content, filename); + return PBUtils::SerializeToFile(src, filename, GetLogger()); } bool PVRunner::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f) { @@ -258,12 +253,6 @@ namespace pulse::study::patient_variability } bool PVRunner::SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f) { - std::string content; - if (ReadFile(filename, content)) - { - Error("Unable to read file " + filename); - return false; - } - return SerializeFromString(content, dst, f); + return PBUtils::SerializeFromFile(filename, dst, GetLogger()); } } \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h index c8b690fc..919281ca 100644 --- a/src/cpp/study/patient_variability/PVRunner.h +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -2,20 +2,7 @@ See accompanying NOTICE file for details.*/ #pragma once - -#include -#include "PulseEngine.h" - -#include "cdm/engine/SEPatientConfiguration.h" -#include "cdm/utils/FileUtils.h" -#include "cdm/utils/TimingProfile.h" - -#include "cdm/io/protobuf/PBActions.h" -PUSH_PROTO_WARNINGS -#include "pulse/study/bind/PatientVariability.pb.h" -#include -#include -POP_PROTO_WARNINGS +#include "PVEngine.h" namespace pulse::study::patient_variability { @@ -26,9 +13,9 @@ namespace pulse::study::patient_variability virtual ~PVRunner(); bool Run(const std::string& filename, eSerializationFormat f); - bool Run(pulse::study::bind::patient_variability::SimulationListData& simList); + bool Run(pulse::study::bind::patient_variability::SimulationListData& simList, const std::string& resultsFilename); - bool RunSimulationUntilStable(std::string const& outDir, pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir = "./"); + bool RunSimulationUntilStable(pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir = "./"); protected: bool Run(); @@ -44,7 +31,6 @@ namespace pulse::study::patient_variability std::mutex m_mutex; bool m_Running; - std::string m_OutDir; std::string m_DataDir; std::string m_SimulationResultsListFile; std::set m_SimulationsToRun; diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp index e962e669..0908d69f 100644 --- a/src/cpp/study/patient_variability/main.cpp +++ b/src/cpp/study/patient_variability/main.cpp @@ -7,78 +7,11 @@ using namespace pulse::study::patient_variability; int main(int argc, char* argv[]) { - enum Sex { Female, Male }; + - unsigned int ageMin = 18; - unsigned int ageMax = 65; - unsigned int ageStep = 1; - - // Heights in inches - unsigned int heightMin_male = 65; - unsigned int heightMax_male = 73; - unsigned int heightMin_female = 60; - unsigned int heightMax_female = 67; - unsigned int heightStep = 1; - - double bmiMin = 18.5; - double bmiMax = 29; - double bmiStep = 0.1; - - unsigned int hrMin = 60; - unsigned int hrMax = 100; - unsigned int hrStep = 1; - - unsigned int mapMin = 70; - unsigned int mapMax = 100; - unsigned int mapStep = 1; - - unsigned int pulsePressureMin = 30; - unsigned int pulsePressureMax = 50; - unsigned int pulsePressureStep = 1; - - unsigned long long int num_scenarios = 0; - for( int sex = Female; sex <= Male; ++sex ) - { - // Adjust height range based on sex - unsigned int heightMin = heightMin_male; - unsigned int heightMax = heightMax_male; - if( sex == Female ) - { - heightMin = heightMin_female; - heightMax = heightMax_female; - } - - for( unsigned int age = ageMin; age <= ageMax; age += ageStep ) - { - for( unsigned int height = heightMin; height <= heightMax; height += heightStep ) - { - for( unsigned int bmi = bmiMin; bmi <= bmiMax; bmi += bmiStep ) - { - // Convert height to meters - double height_meters = height * 0.0254; - - // Caclulate weight (kg) from height and BMI - double weight = bmi * height_meters * height_meters; - - for( unsigned int hr = hrMin; hr <= hrMax; hr += hrStep ) - { - for( unsigned int map = mapMin; map <= mapMax; map += mapStep ) - { - for( unsigned int pp = pulsePressureMin; pp <= pulsePressureMax; pp += pulsePressureStep ) - { - double diastolic = pp - 3 * map; - double systolic = pp - diastolic; - num_scenarios++; - std::cout << "Scenario #" << num_scenarios << std::endl; - } - } - } - } - } - } - } - - std::cout << "Number scenarios: " << num_scenarios << std::endl; + PVRunner pvr("./test_results/patient_variability/PatientVariabilityRunner.log"); + pulse::study::bind::patient_variability::SimulationListData simList; + simList.set_outputrootdir("./test_results/patient_variability"); return 0; } \ No newline at end of file diff --git a/src/schema/pulse/study/bind/PatientVariability.proto b/src/schema/pulse/study/bind/PatientVariability.proto index aa913cdd..040e16ca 100644 --- a/src/schema/pulse/study/bind/PatientVariability.proto +++ b/src/schema/pulse/study/bind/PatientVariability.proto @@ -4,54 +4,68 @@ option java_package = "com.kitware.pulse.study.bind.patient_variability"; option csharp_namespace = "pulse.study.bind.patient_variability"; option optimize_for = SPEED; +message PatientStateData +{ + /** @brief Enumeration for patient sex */ + enum eSex + { + Male=0; /**<< @brief Male patient. */ + Female=1; /**<< @brief Female patient. */ + } + + uint32 ID = 1; + string StateFile = 2; + // Initial Conditions + uint32 Age = 3; + double BMI = 4; + double DiastolicArterialPressure_mmHg = 5; + double HeartRate_bpm = 6; + double Height_cm = 7; + double MeanArterialPressure_mmHg = 8; + eSex Sex = 9; + double SystolicArterialPressure_mmHg = 10; + double Weight_kg = 11; +} + +message PatientStateListData +{ + repeated PatientStateData Patients = 1; +} + +message PatientComparisonData +{ + PatientStateData SoloVentilation = 1; + PatientStateData MultiplexVentilation = 2; +} + +message LogData +{ + repeated string Info = 1; + repeated string Warning = 2; + repeated string Error = 3; + repeated string Fatal = 4; +} + message SimulationData { - // Inputs // A filename without an extension (can/should have path also) // The engine will use this to create multiple output files (*.log and *.csv) - uint32 ID = 1; - string Name = 2; - double IntracranialSpaceVolumeBaseline_mL = 3; - double IntracranialSpaceCompliance_mL_Per_mmHg = 4; - double CerebrospinalFluidAbsorptionRate_mL_Per_min = 5; - double CerebrospinalFluidProductionRate_mL_Per_min = 6; - - // Outputs - double BrainVolume_mL = 7; - double IntracranialSpaceVolume_mL = 8; - double MeanBrainPressure_mmHg = 9; - double MeanBrainVasculatureInFlow_mL_Per_s = 10; - double MeanBrainVasculatureOutFlow_mL_Per_s = 11; - double MeanBrainCarbonDioxidePartialPressure_mmHg = 12; - double MeanBrainOxygenPartialPressure_mmHg = 13; - double MeanIntracranialSpacePressure_mmHg = 14; - // Some other system variable - double CardiacOutput_mL_Per_min = 15; - double CerebralBloodFlow_mL_Per_min = 16; - double CerebralPerfusionPressure_mmHg = 17; - double DiastolicArterialPressure_mmHg = 18; - double HeartEjectionFraction = 19; - double HeartRate_bpm = 20; - double HeartStrokeVolume_mL = 21; - double IntracranialPressure_mmHg = 22; - double MeanArterialPressure_mmHg = 23; - double MeanCentralVenousPressure_mmHg = 24; - double PulmonaryDiastolicArterialPressure_mmHg = 25; - double PulmonaryMeanArterialPressure_mmHg = 26; - double PulmonaryMeanCapillaryFlow_mL_Per_s = 27; - double PulmonarySystolicArterialPressure_mmHg = 28; - double SystolicArterialPressure_mmHg = 29; - double SystemicVascularResistance_mmHg_s_Per_L = 30; - - // Stabilization Information - bool AchievedStabilization = 31; - double StabilizationTime_s = 32; - double TotalSimulationTime_s = 33; - + uint32 ID = 1; + uint32 GroupID = 2; + string OutputBaseFilename = 3; + bool AchievedStabilization = 4; + double StabilizationTime_s = 5; + double RespirationRate_Per_min = 6; + double IERatio = 7; + double PIP_cmH2O = 8; + double PEEP_cmH2O = 9; + double FiO2 = 10; + LogData Log = 11; + repeated PatientComparisonData PatientComparisons = 12; } message SimulationListData { - string OutputRootDir = 1; - repeated SimulationData Simulation = 2; + string OutputRootDir = 1; + repeated SimulationData Simulations = 2; } -- GitLab From 7d326ca4341f095a9c03241c472130ce5029349a Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Fri, 1 Apr 2022 11:25:30 -0500 Subject: [PATCH 006/115] file structure and cmake updates --- src/cpp/bind/CMakeLists.txt | 2 ++ .../study/patient_variability/CMakeLists.txt | 4 +++ src/cpp/study/patient_variability/main.cpp | 31 ++++++++++++++++--- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/cpp/bind/CMakeLists.txt b/src/cpp/bind/CMakeLists.txt index 79015639..d81b3289 100644 --- a/src/cpp/bind/CMakeLists.txt +++ b/src/cpp/bind/CMakeLists.txt @@ -48,6 +48,7 @@ add_library_ex(DataModelBindings # study bindings "${DST_ROOT}/cpp/${STUDY_PACKAGE}/Hydrocephalus.pb.h" "${DST_ROOT}/cpp/${STUDY_PACKAGE}/MultiplexVentilation.pb.h" + "${DST_ROOT}/cpp/${STUDY_PACKAGE}/PatientVariability.pb.h" "${DST_ROOT}/cpp/${STUDY_PACKAGE}/SensitivityAnalysis.pb.h" CPP_FILES # cdm bindings @@ -96,6 +97,7 @@ add_library_ex(DataModelBindings # study bindings "${DST_ROOT}/cpp/${STUDY_PACKAGE}/Hydrocephalus.pb.cc" "${DST_ROOT}/cpp/${STUDY_PACKAGE}/MultiplexVentilation.pb.cc" + "${DST_ROOT}/cpp/${STUDY_PACKAGE}/PatientVariability.pb.cc" "${DST_ROOT}/cpp/${STUDY_PACKAGE}/SensitivityAnalysis.pb.cc" PRIVATE_DEPENDS protobuf::libprotobuf diff --git a/src/cpp/study/patient_variability/CMakeLists.txt b/src/cpp/study/patient_variability/CMakeLists.txt index 9a0809ea..88fdb43b 100644 --- a/src/cpp/study/patient_variability/CMakeLists.txt +++ b/src/cpp/study/patient_variability/CMakeLists.txt @@ -1,7 +1,11 @@ add_library_ex(PatientVariabilityEngine H_FILES + PVEngine.h + PVGenerator.h PVRunner.h CPP_FILES + PVEngine.cpp + PVGenerator.cpp PVRunner.cpp PUBLIC_DEPENDS PulseEngine diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp index 0908d69f..585e3291 100644 --- a/src/cpp/study/patient_variability/main.cpp +++ b/src/cpp/study/patient_variability/main.cpp @@ -2,16 +2,39 @@ See accompanying NOTICE file for details.*/ #include "PVRunner.h" +#include "PVGenerator.h" + +#include "cdm/utils/FileUtils.h" using namespace pulse::study::patient_variability; int main(int argc, char* argv[]) { - + std::string mode = ""; // Default is to run the manual else below + if (argc <= 1) + { + // Adjust comments to run the mode you want + //mode = "clear"; + mode = "genPatients"; + } + else + { + mode = argv[1]; + } + + if(mode == "genPatients") + { + PVGenerator pvg("./test_results/patient_variability/PatientVariabilityGen.log"); + pulse::study::bind::patient_variability::SimulationListData simList; + simList.set_outputrootdir("./test_results/patient_variability"); + + return !pvg.Run("./test_results/patient_variability", "./test_results/patient_variability/states_list.json"); + } + else if(mode == "clear") + { + DeleteDirectory("./test_results/patient_variability"); + } - PVRunner pvr("./test_results/patient_variability/PatientVariabilityRunner.log"); - pulse::study::bind::patient_variability::SimulationListData simList; - simList.set_outputrootdir("./test_results/patient_variability"); return 0; } \ No newline at end of file -- GitLab From 68322941c30a3e70bcd478d54b0c6ef6969b3280 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Fri, 1 Apr 2022 11:55:43 -0500 Subject: [PATCH 007/115] create patient.json --- .../study/patient_variability/PVEngine.cpp | 374 ++++++++++++++++++ src/cpp/study/patient_variability/PVEngine.h | 75 ++++ .../study/patient_variability/PVGenerator.cpp | 287 ++++++++++++++ .../study/patient_variability/PVGenerator.h | 40 ++ 4 files changed, 776 insertions(+) create mode 100644 src/cpp/study/patient_variability/PVEngine.cpp create mode 100644 src/cpp/study/patient_variability/PVEngine.h create mode 100644 src/cpp/study/patient_variability/PVGenerator.cpp create mode 100644 src/cpp/study/patient_variability/PVGenerator.h diff --git a/src/cpp/study/patient_variability/PVEngine.cpp b/src/cpp/study/patient_variability/PVEngine.cpp new file mode 100644 index 00000000..8072a418 --- /dev/null +++ b/src/cpp/study/patient_variability/PVEngine.cpp @@ -0,0 +1,374 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#include "PVEngine.h" + +#include "engine/common/system/Model.h" +#include "cdm/system/environment/SEEnvironment.h" +#include "cdm/system/equipment/anesthesia_machine/SEAnesthesiaMachine.h" +#include "cdm/system/equipment/bag_valve_mask/SEBagValveMask.h" +#include "cdm/system/equipment/electrocardiogram/SEElectroCardioGram.h" +#include "cdm/system/equipment/inhaler/SEInhaler.h" +#include "cdm/system/equipment/mechanical_ventilator/SEMechanicalVentilator.h" +#include "cdm/system/physiology/SEBloodChemistrySystem.h" +#include "cdm/system/physiology/SECardiovascularSystem.h" +#include "cdm/system/physiology/SEDrugSystem.h" +#include "cdm/system/physiology/SEEndocrineSystem.h" +#include "cdm/system/physiology/SEEnergySystem.h" +#include "cdm/system/physiology/SEGastrointestinalSystem.h" +#include "cdm/system/physiology/SEHepaticSystem.h" +#include "cdm/system/physiology/SENervousSystem.h" +#include "cdm/system/physiology/SERenalSystem.h" +#include "cdm/system/physiology/SERespiratorySystem.h" +#include "cdm/system/physiology/SETissueSystem.h" + +using namespace pulse; + +namespace pulse::study::patient_variability +{ + PVEngine::PVEngine(std::string const& logfile, bool cout_enabled, std::string const& data_dir) : Loggable(new Logger(logfile)) + { + m_TimeStep_s = 0.02; + m_CurrentTime_s = 0; + m_SpareAdvanceTime_s = 0; + + m_SubMgr = nullptr; + + m_DataDir = data_dir; + m_SimulationData = nullptr; + + myLogger = true; + GetLogger()->LogToConsole(cout_enabled); + Info("Logging to console : " + std::string(cout_enabled ? "True" : "False")); + } + PVEngine::~PVEngine() + { + DestroyEngines(); + SAFE_DELETE(m_SimulationData); + } + + void PVEngine::DestroyEngines() + { + m_CurrentTime_s = 0; + SAFE_DELETE(m_SubMgr); + + DELETE_VECTOR(m_Engines); + m_Controllers.clear(); + } + + void PVEngine::HandleEvent(eEvent /*e*/, bool /*active*/, const SEScalarTime* /*simTime*/) + { + + } + + bool PVEngine::CreateEngine(const std::string& simulationDataStr) + { + SAFE_DELETE(m_SimulationData); + m_SimulationData = new pulse::study::bind::patient_variability::SimulationData(); + SerializeFromString(simulationDataStr, *m_SimulationData); + return CreateEngine(*m_SimulationData); + } + + bool PVEngine::CreateEngine(pulse::study::bind::patient_variability::SimulationData& sim) + { + try + { + if (!m_Controllers.empty()) + { + Error("The controller currently has engine allocated, please reset the controller to start new set of engines"); + return false; + } + // Figure out where to put results + std::string outDir = sim.outputbasefilename(); + if (outDir.empty()) + outDir = ""; + + m_SubMgr = new SESubstanceManager(GetLogger()); + m_SubMgr->LoadSubstanceDirectory(m_DataDir); + + Info("Creating " + std::to_string(sim.patientcomparisons_size()) + " patients"); + for (int p = 0; p < sim.patientcomparisons_size(); p++) + { + Engine* pe = (Engine*)CreatePulseEngine().release(); + Controller* pc = &pe->GetController(); + m_Controllers.push_back(pc); + m_Engines.push_back(pe); + } + + //Simulation actions here + + //Info("Processing Action"); + //ProcessAction(*m_MVC); + m_CurrentTime_s = 0; + m_SpareAdvanceTime_s = 0; + } + catch (CommonDataModelException& cdm_ex) + { + GetLogger()->Fatal("Exception caught runnning simulation " + sim.outputbasefilename()); + GetLogger()->Fatal(cdm_ex.what()); + std::cerr << cdm_ex.what() << std::endl; + return false; + } + catch (std::exception& ex) + { + GetLogger()->Fatal("Exception caught runnning simulation " + sim.outputbasefilename()); + GetLogger()->Fatal(ex.what()); + std::cerr << ex.what() << std::endl; + return false; + } + catch (...) + { + std::cerr << "Unable to run simulation " << sim.outputbasefilename() << std::endl; + return false; + } + Info("Engine is ready"); + return true; + } + + bool PVEngine::AdvanceTime(double time_s) + { + if (m_Controllers.empty()) + { + Error("No engines have been allocated yet..."); + return false; + } + + time_s += m_SpareAdvanceTime_s; + int count = (int)(time_s / m_TimeStep_s); + m_SpareAdvanceTime_s = time_s - (count * m_TimeStep_s); + + for (int i = 0; i < count; i++) + { + for (Controller* pc : m_Controllers) + { + if (pc->GetEvents().IsEventActive(eEvent::IrreversibleState)) + return false; + } + // PreProcess + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEnvironment()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetCardiovascular()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetInhaler()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetRespiratory()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetAnesthesiaMachine()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetMechanicalVentilator()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetGastrointestinal()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetHepatic()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetRenal()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetNervous()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEnergy()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEndocrine()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetDrugs()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetTissue()).PreProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetBloodChemistry()).PreProcess(); + + // Process + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEnvironment()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetCardiovascular()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetInhaler()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetRespiratory()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetAnesthesiaMachine()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetMechanicalVentilator()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetGastrointestinal()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetHepatic()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetRenal()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetNervous()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEnergy()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEndocrine()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetDrugs()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetTissue()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetBloodChemistry()).Process(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetECG()).Process(); + + // PostProcess + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEnvironment()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetCardiovascular()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetInhaler()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetRespiratory()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetAnesthesiaMachine()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetMechanicalVentilator()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetGastrointestinal()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetHepatic()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetRenal()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetNervous()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEnergy()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetEndocrine()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetDrugs()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetTissue()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetBloodChemistry()).PostProcess(); + for (Controller* pc : m_Controllers) + dynamic_cast(pc->GetECG()).PostProcess(); + + // Increment Times and track data + for (Controller* pc : m_Controllers) + { + pc->GetEvents().UpdateEvents(pc->GetTimeStep()); + const_cast(pc->GetEngineTime()).Increment(pc->GetTimeStep()); + const_cast(pc->GetSimulationTime()).Increment(pc->GetTimeStep()); + pc->GetEngineTracker().TrackData(m_CurrentTime_s); + } + m_CurrentTime_s += m_TimeStep_s; + } + return true; + } + + bool PVEngine::ProcessAction(const SEAction& a) + { + if (m_Controllers.empty()) + { + Error("No engines have been allocated yet..."); + return false; + } + bool b = true; + for (Controller* pc : m_Controllers) + if (!pc->ProcessAction(a)) + b = false; + return b; + } + bool PVEngine::ProcessActions(std::string const& actions, eSerializationFormat format) + { + if (m_Controllers.empty()) + { + Error("No engines have been allocated yet..."); + return false; + } + + bool success = true; + if (actions.empty()) + return success; + + try + { + std::vector vActions; + if (!SEActionManager::SerializeFromString(actions, vActions, format, *m_SubMgr)) + return false; + + for (const SEAction* a : vActions) + { + if (!ProcessAction(*a)) + success = false; + delete a; + } + } + catch (CommonDataModelException& ex) + { + success = false; + GetLogger()->Error(ex.what()); + } + catch (std::exception& ex) + { + success = false; + GetLogger()->Error(ex.what()); + } + catch (...) + { + success = false; + } + return success; + } + + std::string PVEngine::GetSimulationState() + { + if (!GetSimulationState(*m_SimulationData)) + return ""; + + std::string content; + SerializeToString(*m_SimulationData, content); + return content; + } + bool PVEngine::GetSimulationState(pulse::study::bind::patient_variability::SimulationData& sim) + { + if (m_Controllers.empty()) + { + Error("No engines have been allocated yet..."); + return false; + } + + for (int p = 0; p < sim.patientcomparisons_size(); p++) + { + Controller* pc = m_Controllers[p]; + + // Write out data + + // Update the sim + } + return true; + } + + void PVEngine::TrackData(SEEngineTracker& trkr, const std::string& csv_filename) + { + trkr.GetDataRequestManager().SetResultsFilename(csv_filename); + //Create data requests + + trkr.SetupRequests(); + } + + bool PVEngine::SerializeToString(pulse::study::bind::patient_variability::SimulationData& src, std::string& dst) + { + google::protobuf::util::JsonPrintOptions printOpts; + printOpts.add_whitespace = true; + printOpts.preserve_proto_field_names = true; + printOpts.always_print_primitive_fields = true; + return google::protobuf::util::MessageToJsonString(src, &dst, printOpts).ok(); + } + bool PVEngine::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationData& dst) + { + google::protobuf::util::JsonParseOptions parseOpts; + google::protobuf::SetLogHandler([](google::protobuf::LogLevel level, const char* filename, int line, const std::string& message) + { + std::cout << "[" << level << "] " << filename << "::" << line << " " << message; + }); + google::protobuf::util::Status stat = google::protobuf::util::JsonStringToMessage(src, &dst, parseOpts); + if (!stat.ok()) + { + std::cerr << "Unable to parse json in string : " << stat.ToString() << std::endl; + return false; + } + return true; + } +} \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVEngine.h b/src/cpp/study/patient_variability/PVEngine.h new file mode 100644 index 00000000..43d9fb3c --- /dev/null +++ b/src/cpp/study/patient_variability/PVEngine.h @@ -0,0 +1,75 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#pragma once +#include +#include "PulseEngine.h" + +#include "engine/common/Engine.h" +#include "engine/common/controller/Controller.h" +#include "cdm/substance/SESubstanceManager.h" +#include "cdm/patient/SEPatient.h" +#include "cdm/engine/SEOverrides.h" +#include "cdm/engine/SEEngineTracker.h" +#include "cdm/engine/SEDataRequestManager.h" +#include "cdm/engine/SEActionManager.h" +#include "cdm/engine/SEPatientActionCollection.h" +#include "cdm/engine/SEPatientConfiguration.h" +#include "cdm/substance/SESubstanceManager.h" +#include "cdm/utils/DataTrack.h" +#include "cdm/utils/FileUtils.h" +#include "cdm/utils/GeneralMath.h" +#include "cdm/utils/TimingProfile.h" + +PUSH_PROTO_WARNINGS +#include "pulse/study/bind/PatientVariability.pb.h" +#include +#include +POP_PROTO_WARNINGS +#include "io/protobuf/PBUtils.h" + +namespace pulse::study::patient_variability +{ + class PULSE_DECL PVEngine : public Loggable, public SEEventHandler + { + friend class PVRunner; + friend class PVGenerator; + public: + PVEngine(std::string const& logfile = "", bool cout_enabled = true, std::string const& data_dir = "./"); + ~PVEngine(); + + bool CreateEngine(const std::string& simulationDataStr /*eSerializationFormat fmt*/); + bool CreateEngine(pulse::study::bind::patient_variability::SimulationData& sim); + + bool AdvanceTime(double time_s); + + bool ProcessAction(const SEAction& action); + bool ProcessActions(std::string const& actions, eSerializationFormat format); + + std::string GetSimulationState(/*eSerializationFormat fmt*/); + bool GetSimulationState(pulse::study::bind::patient_variability::SimulationData& sim); + + void DestroyEngines(); + + static void TrackData(SEEngineTracker& trkr, const std::string& csv_filename); + + static bool SerializeToString(pulse::study::bind::patient_variability::SimulationData& src, std::string& dst /*eSerializationFormat fmt*/); + static bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationData& dst /*eSerializationFormat fmt*/); + + protected: + void HandleEvent(eEvent e, bool active, const SEScalarTime* simTime = nullptr) override; + + + std::string m_DataDir; + std::vector m_Engines; + std::vector m_Controllers; + + double m_TimeStep_s; + double m_CurrentTime_s; + double m_SpareAdvanceTime_s; + // Substances + SESubstanceManager* m_SubMgr; + + pulse::study::bind::patient_variability::SimulationData* m_SimulationData; + }; +} diff --git a/src/cpp/study/patient_variability/PVGenerator.cpp b/src/cpp/study/patient_variability/PVGenerator.cpp new file mode 100644 index 00000000..61ec7ee3 --- /dev/null +++ b/src/cpp/study/patient_variability/PVGenerator.cpp @@ -0,0 +1,287 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#include "PVGenerator.h" +#include "cdm/patient/SEPatient.h" +#include "cdm/properties/SEScalarFrequency.h" +#include "cdm/properties/SEScalarLength.h" +#include "cdm/properties/SEScalarMass.h" +#include "cdm/properties/SEScalarMassPerVolume.h" +#include "cdm/properties/SEScalarTime.h" +#include "cdm/properties/SEScalarVolume.h" +#include "cdm/properties/SEScalarVolumePerPressure.h" + +namespace pulse::study::patient_variability +{ + PVGenerator::PVGenerator(const std::string& logfileName, const std::string& dataDir) : Loggable(logfileName) + { + m_DataDir = dataDir; + m_PatientList = nullptr; + m_CompletedPatientList = nullptr; + } + PVGenerator::~PVGenerator() + { + SAFE_DELETE(m_PatientList); + SAFE_DELETE(m_CompletedPatientList); + } + + void PVGenerator::GeneratePatientList(const std::string& stateDir) + { + int id = 0; + SAFE_DELETE(m_PatientList); + m_PatientList = new pulse::study::bind::patient_variability::PatientStateListData(); + + enum Sex { Male=0, Female=1 }; + + unsigned int ageMin = 18; + unsigned int ageMax = 65; + unsigned int ageStep = 10; + + // Heights in inches + unsigned int heightMin_male = 65; + unsigned int heightMax_male = 73; + unsigned int heightMin_female = 60; + unsigned int heightMax_female = 67; + unsigned int heightStep = 3; + + double bmiMin = 18.5; + double bmiMax = 29; + double bmiStep = 3; + + unsigned int hrMin = 60; + unsigned int hrMax = 100; + unsigned int hrStep = 15; + + unsigned int mapMin = 70; + unsigned int mapMax = 100; + unsigned int mapStep = 10; + + unsigned int pulsePressureMin = 30; + unsigned int pulsePressureMax = 50; + unsigned int pulsePressureStep = 10; + + for( int sex = Male; sex <= Female; ++sex ) + { + // Adjust height range based on sex + unsigned int heightMin = heightMin_male; + unsigned int heightMax = heightMax_male; + std::string sex_dir = "male"; + if( sex == Female ) + { + heightMin = heightMin_female; + heightMax = heightMax_female; + sex_dir = "female"; + } + + std::string sex_path = stateDir + "/" + sex_dir; + + for( unsigned int age = ageMin; age <= ageMax; age += ageStep ) + { + std::string age_path = sex_path + "/yr" + std::to_string(age); + for( unsigned int height = heightMin; height <= heightMax; height += heightStep ) + { + std::string height_path = age_path + "/in" + std::to_string(height); + for( double bmi = bmiMin; bmi <= bmiMax; bmi += bmiStep ) + { + std::string bmi_path = height_path + "/bmi" + std::to_string(bmi); + + // Convert height to meters + double height_cm = height * 2.54; + + // Caclulate weight (kg) from height (m) and BMI + double weight = bmi * height_cm * height_cm * 0.0001; + + for( unsigned int hr = hrMin; hr <= hrMax; hr += hrStep ) + { + std::string hr_path = bmi_path + "/hr" + std::to_string(hr); + for( unsigned int map = mapMin; map <= mapMax; map += mapStep ) + { + std::string map_path = hr_path + "/map" + std::to_string(map); + for( unsigned int pp = pulsePressureMin; pp <= pulsePressureMax; pp += pulsePressureStep ) + { + std::string full_dir_path = map_path + "/pp" + std::to_string(pp); + CreatePath(full_dir_path); + double diastolic = pp - 3 * map; + double systolic = pp - diastolic; + auto patientData = m_PatientList->add_patients(); + patientData->set_id(id); + patientData->set_age(age); + patientData->set_bmi(bmi); + patientData->set_diastolicarterialpressure_mmhg(diastolic); + patientData->set_heartrate_bpm(hr); + patientData->set_height_cm(height_cm); + patientData->set_meanarterialpressure_mmhg(map); + patientData->set_sex((pulse::study::bind::patient_variability::PatientStateData::eSex)sex); + patientData->set_systolicarterialpressure_mmhg(systolic); + patientData->set_weight_kg(weight); + + SEPatient p(nullptr); + p.SetName(std::to_string(id++)); + if(sex == Male) + { + p.SetSex(ePatient_Sex::Male); + } + else + { + p.SetSex(ePatient_Sex::Female); + } + p.GetAge().SetValue(age, TimeUnit::yr); + p.GetHeight().SetValue(height_cm, LengthUnit::cm); + p.GetWeight().SetValue(weight, MassUnit::kg); + p.GetDiastolicArterialPressureBaseline().SetValue(diastolic, PressureUnit::mmHg); + p.GetHeartRateBaseline().SetValue(hr, FrequencyUnit::Per_min); + p.GetMeanArterialPressureBaseline().SetValue(map, PressureUnit::mmHg); + p.GetSystolicArterialPressureBaseline().SetValue(systolic, PressureUnit::mmHg); + p.SerializeToFile(full_dir_path + "/patient.json"); + } + } + } + } + } + } + } + } + + bool PVGenerator::Run(const std::string& stateDir, const std::string listFilename) + { + TimingProfile profiler; + profiler.Start("Total"); + m_PatientStateListFile = listFilename; + + GeneratePatientList(stateDir); + // Get the ID's of Patients we need to run + m_PatientsToRun.clear(); + for (int i = 0; i < m_PatientList->patients_size(); i++) + m_PatientsToRun.insert(m_PatientList->patients()[i].id()); + + // Remove any id's we have in the results + SAFE_DELETE(m_CompletedPatientList); + m_CompletedPatientList = new pulse::study::bind::patient_variability::PatientStateListData(); + if (FileExists(listFilename)) + { + if (!SerializeFromFile(listFilename)) + return false; + if (m_CompletedPatientList->patients_size() > 0) + { + Info("Found " + std::to_string(m_CompletedPatientList->patients_size()) + " previously run Patients"); + for (int i = 0; i < m_CompletedPatientList->patients_size(); i++) + m_PatientsToRun.erase(m_CompletedPatientList->patients()[i].id()); + } + } + + size_t numPatientsToRun = m_PatientList->patients_size() - m_CompletedPatientList->patients_size(); + if (numPatientsToRun == 0) + { + Info("All Patients are run in the results file"); + return true; + } + size_t processor_count = std::thread::hardware_concurrency(); + if (processor_count == 0) + { + Fatal("Unable to detect number of processors"); + return false; + } + // Let's not kill the computer this is running on... + if (processor_count > 1) + processor_count -= 1; + // Let's not kick off more threads than we need + if (processor_count > numPatientsToRun) + processor_count = numPatientsToRun; + Info("Starting " + std::to_string(processor_count) + " Threads to generate " + std::to_string(numPatientsToRun) + " patients"); + // Crank up our threads + for (size_t p = 0; p < processor_count; p++) + m_Threads.push_back(std::thread(&PVGenerator::ControllerLoop, this)); + + for (size_t p = 0; p < processor_count; p++) + m_Threads[p].join(); + + Info("It took " + cdm::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this Patient list"); + profiler.Clear(); + return true; + } + + void PVGenerator::ControllerLoop() + { + pulse::study::bind::patient_variability::PatientStateData* p; + while (true) + { + p = GetNextPatient(); + if (p == nullptr) + break; + GenerateStabilizedPatient(*p, false); + FinalizePatient(*p); + } + } + + bool PVGenerator::GenerateStabilizedPatient(pulse::study::bind::patient_variability::PatientStateData& pData, bool logToConsole) + { + return true; + } + + pulse::study::bind::patient_variability::PatientStateData* PVGenerator::GetNextPatient() + { + m_mutex.lock(); + pulse::study::bind::patient_variability::PatientStateData* p = nullptr; + if (!m_PatientsToRun.empty()) + { + auto id = *m_PatientsToRun.begin(); + for (int i = 0; i < m_PatientList->patients_size(); i++) + { + p = &(*m_PatientList->mutable_patients())[i]; + if (p->id() == id) + break; + } + Info("Generating Patient ID " + std::to_string(id)); + m_PatientsToRun.erase(id); + } + m_mutex.unlock(); + return p; + } + + void PVGenerator::FinalizePatient(pulse::study::bind::patient_variability::PatientStateData& p) + { + m_mutex.lock(); + auto ps = m_CompletedPatientList->mutable_patients()->Add(); + ps->CopyFrom(p); + SerializeToFile(*m_CompletedPatientList, m_PatientStateListFile); + Info("Completed Patient " + std::to_string(m_CompletedPatientList->patients_size()) + " of " + std::to_string(m_PatientList->patients_size())); + m_mutex.unlock(); + } + + bool PVGenerator::SerializeToString(pulse::study::bind::patient_variability::PatientStateListData& src, std::string& output, eSerializationFormat f) const + { + google::protobuf::util::JsonPrintOptions printOpts; + printOpts.add_whitespace = true; + printOpts.preserve_proto_field_names = true; + printOpts.always_print_primitive_fields = true; + if (!google::protobuf::util::MessageToJsonString(src, &output, printOpts).ok()) + { + Error("Unable to serialize Patient list"); + return false; + } + return true; + } + bool PVGenerator::SerializeToFile(pulse::study::bind::patient_variability::PatientStateListData& src, const std::string& filename) const + { + return PBUtils::SerializeToFile(src, filename, GetLogger()); + } + bool PVGenerator::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::PatientStateListData& dst, eSerializationFormat f) + { + google::protobuf::util::JsonParseOptions parseOpts; + google::protobuf::SetLogHandler([](google::protobuf::LogLevel level, const char* filename, int line, const std::string& message) + { + std::cout << "[" << level << "] " << filename << "::" << line << " " << message; + }); + google::protobuf::util::Status stat = google::protobuf::util::JsonStringToMessage(src, &dst, parseOpts); + if (!stat.ok()) + { + Error("Unable to parse json in string"); + return false; + } + return true; + } + bool PVGenerator::SerializeFromFile(const std::string& filename) + { + return PBUtils::SerializeFromFile(filename, *m_CompletedPatientList, GetLogger()); + } +} \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVGenerator.h b/src/cpp/study/patient_variability/PVGenerator.h new file mode 100644 index 00000000..fc501b55 --- /dev/null +++ b/src/cpp/study/patient_variability/PVGenerator.h @@ -0,0 +1,40 @@ +/* Distributed under the Apache License, Version 2.0. + See accompanying NOTICE file for details.*/ + +#pragma once +#include "PVEngine.h" + +namespace pulse::study::patient_variability +{ + class PVGenerator : public Loggable + { + public: + PVGenerator(const std::string& logfileName, const std::string& dataDir = "."); + virtual ~PVGenerator(); + + bool Run(const std::string& stateDir, const std::string listFilename); + + static bool GenerateStabilizedPatient(pulse::study::bind::patient_variability::PatientStateData& pData, bool logToConsole); + + protected: + bool SerializeToString(pulse::study::bind::patient_variability::PatientStateListData& src, std::string& dst, eSerializationFormat f) const; + bool SerializeToFile(pulse::study::bind::patient_variability::PatientStateListData& src, const std::string& filename) const; + bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::PatientStateListData& dst, eSerializationFormat f); + bool SerializeFromFile(const std::string& filename); + + void GeneratePatientList(const std::string& stateDir); + void ControllerLoop(); + void FinalizePatient(pulse::study::bind::patient_variability::PatientStateData& sim); + pulse::study::bind::patient_variability::PatientStateData* GetNextPatient(); + + std::string m_DataDir; + std::mutex m_mutex; + bool m_Running; + + std::string m_PatientStateListFile; + std::set m_PatientsToRun; + std::vector m_Threads; + pulse::study::bind::patient_variability::PatientStateListData* m_PatientList; + pulse::study::bind::patient_variability::PatientStateListData* m_CompletedPatientList; + }; +} \ No newline at end of file -- GitLab From 1e5bd38903ed54dc548177494d77831f4fc411e6 Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Fri, 1 Apr 2022 22:36:23 -0400 Subject: [PATCH 008/115] Clean up the patient variability study project Its not as complicated as the multiplex study, so we do not need as much infrastructure (nix'd PVEngine) The sys/dia pressure equation is not right... So far this now generates a log, csv, patient file, patient baseline file, updated study results (Added some infrastructure to the config to specify a location to write patient basline file) The csv does not have all requests though (see TODO) --- src/cpp/engine/PulseConfiguration.h | 4 + .../engine/common/controller/Controller.cpp | 14 +- .../engine/io/protobuf/PBConfiguration.cpp | 3 + .../study/patient_variability/CMakeLists.txt | 2 - .../study/patient_variability/PVEngine.cpp | 374 ------------------ src/cpp/study/patient_variability/PVEngine.h | 75 ---- .../study/patient_variability/PVGenerator.cpp | 271 ++----------- .../study/patient_variability/PVGenerator.h | 56 ++- .../study/patient_variability/PVRunner.cpp | 226 ++++++----- src/cpp/study/patient_variability/PVRunner.h | 40 +- src/cpp/study/patient_variability/main.cpp | 85 +++- .../pulse/engine/bind/Configuration.proto | 33 +- .../pulse/study/bind/PatientVariability.proto | 64 +-- 13 files changed, 349 insertions(+), 898 deletions(-) delete mode 100644 src/cpp/study/patient_variability/PVEngine.cpp delete mode 100644 src/cpp/study/patient_variability/PVEngine.h diff --git a/src/cpp/engine/PulseConfiguration.h b/src/cpp/engine/PulseConfiguration.h index 6c1e145c..8c55a739 100644 --- a/src/cpp/engine/PulseConfiguration.h +++ b/src/cpp/engine/PulseConfiguration.h @@ -59,6 +59,9 @@ public: virtual bool IsWritingPatientBaselineFile() const { return m_WritePatientBaselineFile == eSwitch::On; } virtual void EnableWritePatientBaselineFile(eSwitch s) { m_WritePatientBaselineFile = (s == eSwitch::NullSwitch) ? eSwitch::Off : s; } + virtual void SetInitialPatientBaselineFilepath(const std::string& filepath) { m_InitialPatientBaselineFilepath = filepath; } + virtual std::string GetInitialPatientBaselineFilepath() { return m_InitialPatientBaselineFilepath; } + virtual bool HasOverrides() const; virtual SEScalarProperties& GetOverrides(); virtual const SEScalarProperties& GetOverrides() const; @@ -73,6 +76,7 @@ protected: SETimedStabilization* m_TimedStabilization; SEDynamicStabilization* m_DynamicStabilization; eSwitch m_WritePatientBaselineFile; + std::string m_InitialPatientBaselineFilepath; SEScalarProperties m_Overrides; SEScalarProperties m_Modifiers; diff --git a/src/cpp/engine/common/controller/Controller.cpp b/src/cpp/engine/common/controller/Controller.cpp index f74e0b96..b4c54e74 100644 --- a/src/cpp/engine/common/controller/Controller.cpp +++ b/src/cpp/engine/common/controller/Controller.cpp @@ -422,9 +422,17 @@ namespace pulse // Now we can check the config if (m_Config->IsWritingPatientBaselineFile()) { - std::string stableDir = m_DataDir + "/stable/"; - MakeDirectory(stableDir.c_str()); - m_CurrentPatient->SerializeToFile(stableDir + m_CurrentPatient->GetName() + ".json"); + std::string out = m_Config->GetInitialPatientBaselineFilepath(); + if (out.empty()) + { + out = m_DataDir + "/stable/"; + MakeDirectory(out.c_str()); + m_CurrentPatient->SerializeToFile(out + m_CurrentPatient->GetName() + ".json"); + } + else + { + m_CurrentPatient->SerializeToFile(out); + } } m_Actions->Clear(); diff --git a/src/cpp/engine/io/protobuf/PBConfiguration.cpp b/src/cpp/engine/io/protobuf/PBConfiguration.cpp index 1932eaa0..dce19a28 100644 --- a/src/cpp/engine/io/protobuf/PBConfiguration.cpp +++ b/src/cpp/engine/io/protobuf/PBConfiguration.cpp @@ -56,6 +56,8 @@ namespace pulse } if (src.writepatientbaselinefile() != CDM_BIND::eSwitch::NullSwitch) dst.EnableWritePatientBaselineFile((eSwitch)src.writepatientbaselinefile()); + if (!src.patientbaselinefilepath().empty()) + dst.SetInitialPatientBaselineFilepath(src.patientbaselinefilepath()); for (auto& [name, m] : src.modifiers()) dst.GetModifiers()[name] = SEScalarPair(m.value(), m.unit()); @@ -372,6 +374,7 @@ namespace pulse dst.set_allocated_timestep(PBProperty::Unload(*src.m_TimeStep)); dst.set_allowdynamictimestep((CDM_BIND::eSwitch)src.m_AllowDynamicTimeStep); dst.set_writepatientbaselinefile((CDM_BIND::eSwitch)src.m_WritePatientBaselineFile); + dst.set_patientbaselinefilepath(src.m_InitialPatientBaselineFilepath); for (auto const& [name, m] : src.GetModifiers()) { diff --git a/src/cpp/study/patient_variability/CMakeLists.txt b/src/cpp/study/patient_variability/CMakeLists.txt index 88fdb43b..0ac87210 100644 --- a/src/cpp/study/patient_variability/CMakeLists.txt +++ b/src/cpp/study/patient_variability/CMakeLists.txt @@ -1,10 +1,8 @@ add_library_ex(PatientVariabilityEngine H_FILES - PVEngine.h PVGenerator.h PVRunner.h CPP_FILES - PVEngine.cpp PVGenerator.cpp PVRunner.cpp PUBLIC_DEPENDS diff --git a/src/cpp/study/patient_variability/PVEngine.cpp b/src/cpp/study/patient_variability/PVEngine.cpp deleted file mode 100644 index 8072a418..00000000 --- a/src/cpp/study/patient_variability/PVEngine.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/* Distributed under the Apache License, Version 2.0. - See accompanying NOTICE file for details.*/ - -#include "PVEngine.h" - -#include "engine/common/system/Model.h" -#include "cdm/system/environment/SEEnvironment.h" -#include "cdm/system/equipment/anesthesia_machine/SEAnesthesiaMachine.h" -#include "cdm/system/equipment/bag_valve_mask/SEBagValveMask.h" -#include "cdm/system/equipment/electrocardiogram/SEElectroCardioGram.h" -#include "cdm/system/equipment/inhaler/SEInhaler.h" -#include "cdm/system/equipment/mechanical_ventilator/SEMechanicalVentilator.h" -#include "cdm/system/physiology/SEBloodChemistrySystem.h" -#include "cdm/system/physiology/SECardiovascularSystem.h" -#include "cdm/system/physiology/SEDrugSystem.h" -#include "cdm/system/physiology/SEEndocrineSystem.h" -#include "cdm/system/physiology/SEEnergySystem.h" -#include "cdm/system/physiology/SEGastrointestinalSystem.h" -#include "cdm/system/physiology/SEHepaticSystem.h" -#include "cdm/system/physiology/SENervousSystem.h" -#include "cdm/system/physiology/SERenalSystem.h" -#include "cdm/system/physiology/SERespiratorySystem.h" -#include "cdm/system/physiology/SETissueSystem.h" - -using namespace pulse; - -namespace pulse::study::patient_variability -{ - PVEngine::PVEngine(std::string const& logfile, bool cout_enabled, std::string const& data_dir) : Loggable(new Logger(logfile)) - { - m_TimeStep_s = 0.02; - m_CurrentTime_s = 0; - m_SpareAdvanceTime_s = 0; - - m_SubMgr = nullptr; - - m_DataDir = data_dir; - m_SimulationData = nullptr; - - myLogger = true; - GetLogger()->LogToConsole(cout_enabled); - Info("Logging to console : " + std::string(cout_enabled ? "True" : "False")); - } - PVEngine::~PVEngine() - { - DestroyEngines(); - SAFE_DELETE(m_SimulationData); - } - - void PVEngine::DestroyEngines() - { - m_CurrentTime_s = 0; - SAFE_DELETE(m_SubMgr); - - DELETE_VECTOR(m_Engines); - m_Controllers.clear(); - } - - void PVEngine::HandleEvent(eEvent /*e*/, bool /*active*/, const SEScalarTime* /*simTime*/) - { - - } - - bool PVEngine::CreateEngine(const std::string& simulationDataStr) - { - SAFE_DELETE(m_SimulationData); - m_SimulationData = new pulse::study::bind::patient_variability::SimulationData(); - SerializeFromString(simulationDataStr, *m_SimulationData); - return CreateEngine(*m_SimulationData); - } - - bool PVEngine::CreateEngine(pulse::study::bind::patient_variability::SimulationData& sim) - { - try - { - if (!m_Controllers.empty()) - { - Error("The controller currently has engine allocated, please reset the controller to start new set of engines"); - return false; - } - // Figure out where to put results - std::string outDir = sim.outputbasefilename(); - if (outDir.empty()) - outDir = ""; - - m_SubMgr = new SESubstanceManager(GetLogger()); - m_SubMgr->LoadSubstanceDirectory(m_DataDir); - - Info("Creating " + std::to_string(sim.patientcomparisons_size()) + " patients"); - for (int p = 0; p < sim.patientcomparisons_size(); p++) - { - Engine* pe = (Engine*)CreatePulseEngine().release(); - Controller* pc = &pe->GetController(); - m_Controllers.push_back(pc); - m_Engines.push_back(pe); - } - - //Simulation actions here - - //Info("Processing Action"); - //ProcessAction(*m_MVC); - m_CurrentTime_s = 0; - m_SpareAdvanceTime_s = 0; - } - catch (CommonDataModelException& cdm_ex) - { - GetLogger()->Fatal("Exception caught runnning simulation " + sim.outputbasefilename()); - GetLogger()->Fatal(cdm_ex.what()); - std::cerr << cdm_ex.what() << std::endl; - return false; - } - catch (std::exception& ex) - { - GetLogger()->Fatal("Exception caught runnning simulation " + sim.outputbasefilename()); - GetLogger()->Fatal(ex.what()); - std::cerr << ex.what() << std::endl; - return false; - } - catch (...) - { - std::cerr << "Unable to run simulation " << sim.outputbasefilename() << std::endl; - return false; - } - Info("Engine is ready"); - return true; - } - - bool PVEngine::AdvanceTime(double time_s) - { - if (m_Controllers.empty()) - { - Error("No engines have been allocated yet..."); - return false; - } - - time_s += m_SpareAdvanceTime_s; - int count = (int)(time_s / m_TimeStep_s); - m_SpareAdvanceTime_s = time_s - (count * m_TimeStep_s); - - for (int i = 0; i < count; i++) - { - for (Controller* pc : m_Controllers) - { - if (pc->GetEvents().IsEventActive(eEvent::IrreversibleState)) - return false; - } - // PreProcess - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEnvironment()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetCardiovascular()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetInhaler()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetRespiratory()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetAnesthesiaMachine()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetMechanicalVentilator()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetGastrointestinal()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetHepatic()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetRenal()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetNervous()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEnergy()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEndocrine()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetDrugs()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetTissue()).PreProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetBloodChemistry()).PreProcess(); - - // Process - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEnvironment()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetCardiovascular()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetInhaler()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetRespiratory()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetAnesthesiaMachine()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetMechanicalVentilator()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetGastrointestinal()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetHepatic()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetRenal()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetNervous()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEnergy()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEndocrine()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetDrugs()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetTissue()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetBloodChemistry()).Process(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetECG()).Process(); - - // PostProcess - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEnvironment()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetCardiovascular()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetInhaler()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetRespiratory()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetAnesthesiaMachine()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetMechanicalVentilator()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetGastrointestinal()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetHepatic()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetRenal()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetNervous()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEnergy()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetEndocrine()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetDrugs()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetTissue()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetBloodChemistry()).PostProcess(); - for (Controller* pc : m_Controllers) - dynamic_cast(pc->GetECG()).PostProcess(); - - // Increment Times and track data - for (Controller* pc : m_Controllers) - { - pc->GetEvents().UpdateEvents(pc->GetTimeStep()); - const_cast(pc->GetEngineTime()).Increment(pc->GetTimeStep()); - const_cast(pc->GetSimulationTime()).Increment(pc->GetTimeStep()); - pc->GetEngineTracker().TrackData(m_CurrentTime_s); - } - m_CurrentTime_s += m_TimeStep_s; - } - return true; - } - - bool PVEngine::ProcessAction(const SEAction& a) - { - if (m_Controllers.empty()) - { - Error("No engines have been allocated yet..."); - return false; - } - bool b = true; - for (Controller* pc : m_Controllers) - if (!pc->ProcessAction(a)) - b = false; - return b; - } - bool PVEngine::ProcessActions(std::string const& actions, eSerializationFormat format) - { - if (m_Controllers.empty()) - { - Error("No engines have been allocated yet..."); - return false; - } - - bool success = true; - if (actions.empty()) - return success; - - try - { - std::vector vActions; - if (!SEActionManager::SerializeFromString(actions, vActions, format, *m_SubMgr)) - return false; - - for (const SEAction* a : vActions) - { - if (!ProcessAction(*a)) - success = false; - delete a; - } - } - catch (CommonDataModelException& ex) - { - success = false; - GetLogger()->Error(ex.what()); - } - catch (std::exception& ex) - { - success = false; - GetLogger()->Error(ex.what()); - } - catch (...) - { - success = false; - } - return success; - } - - std::string PVEngine::GetSimulationState() - { - if (!GetSimulationState(*m_SimulationData)) - return ""; - - std::string content; - SerializeToString(*m_SimulationData, content); - return content; - } - bool PVEngine::GetSimulationState(pulse::study::bind::patient_variability::SimulationData& sim) - { - if (m_Controllers.empty()) - { - Error("No engines have been allocated yet..."); - return false; - } - - for (int p = 0; p < sim.patientcomparisons_size(); p++) - { - Controller* pc = m_Controllers[p]; - - // Write out data - - // Update the sim - } - return true; - } - - void PVEngine::TrackData(SEEngineTracker& trkr, const std::string& csv_filename) - { - trkr.GetDataRequestManager().SetResultsFilename(csv_filename); - //Create data requests - - trkr.SetupRequests(); - } - - bool PVEngine::SerializeToString(pulse::study::bind::patient_variability::SimulationData& src, std::string& dst) - { - google::protobuf::util::JsonPrintOptions printOpts; - printOpts.add_whitespace = true; - printOpts.preserve_proto_field_names = true; - printOpts.always_print_primitive_fields = true; - return google::protobuf::util::MessageToJsonString(src, &dst, printOpts).ok(); - } - bool PVEngine::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationData& dst) - { - google::protobuf::util::JsonParseOptions parseOpts; - google::protobuf::SetLogHandler([](google::protobuf::LogLevel level, const char* filename, int line, const std::string& message) - { - std::cout << "[" << level << "] " << filename << "::" << line << " " << message; - }); - google::protobuf::util::Status stat = google::protobuf::util::JsonStringToMessage(src, &dst, parseOpts); - if (!stat.ok()) - { - std::cerr << "Unable to parse json in string : " << stat.ToString() << std::endl; - return false; - } - return true; - } -} \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVEngine.h b/src/cpp/study/patient_variability/PVEngine.h deleted file mode 100644 index 43d9fb3c..00000000 --- a/src/cpp/study/patient_variability/PVEngine.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Distributed under the Apache License, Version 2.0. - See accompanying NOTICE file for details.*/ - -#pragma once -#include -#include "PulseEngine.h" - -#include "engine/common/Engine.h" -#include "engine/common/controller/Controller.h" -#include "cdm/substance/SESubstanceManager.h" -#include "cdm/patient/SEPatient.h" -#include "cdm/engine/SEOverrides.h" -#include "cdm/engine/SEEngineTracker.h" -#include "cdm/engine/SEDataRequestManager.h" -#include "cdm/engine/SEActionManager.h" -#include "cdm/engine/SEPatientActionCollection.h" -#include "cdm/engine/SEPatientConfiguration.h" -#include "cdm/substance/SESubstanceManager.h" -#include "cdm/utils/DataTrack.h" -#include "cdm/utils/FileUtils.h" -#include "cdm/utils/GeneralMath.h" -#include "cdm/utils/TimingProfile.h" - -PUSH_PROTO_WARNINGS -#include "pulse/study/bind/PatientVariability.pb.h" -#include -#include -POP_PROTO_WARNINGS -#include "io/protobuf/PBUtils.h" - -namespace pulse::study::patient_variability -{ - class PULSE_DECL PVEngine : public Loggable, public SEEventHandler - { - friend class PVRunner; - friend class PVGenerator; - public: - PVEngine(std::string const& logfile = "", bool cout_enabled = true, std::string const& data_dir = "./"); - ~PVEngine(); - - bool CreateEngine(const std::string& simulationDataStr /*eSerializationFormat fmt*/); - bool CreateEngine(pulse::study::bind::patient_variability::SimulationData& sim); - - bool AdvanceTime(double time_s); - - bool ProcessAction(const SEAction& action); - bool ProcessActions(std::string const& actions, eSerializationFormat format); - - std::string GetSimulationState(/*eSerializationFormat fmt*/); - bool GetSimulationState(pulse::study::bind::patient_variability::SimulationData& sim); - - void DestroyEngines(); - - static void TrackData(SEEngineTracker& trkr, const std::string& csv_filename); - - static bool SerializeToString(pulse::study::bind::patient_variability::SimulationData& src, std::string& dst /*eSerializationFormat fmt*/); - static bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationData& dst /*eSerializationFormat fmt*/); - - protected: - void HandleEvent(eEvent e, bool active, const SEScalarTime* simTime = nullptr) override; - - - std::string m_DataDir; - std::vector m_Engines; - std::vector m_Controllers; - - double m_TimeStep_s; - double m_CurrentTime_s; - double m_SpareAdvanceTime_s; - // Substances - SESubstanceManager* m_SubMgr; - - pulse::study::bind::patient_variability::SimulationData* m_SimulationData; - }; -} diff --git a/src/cpp/study/patient_variability/PVGenerator.cpp b/src/cpp/study/patient_variability/PVGenerator.cpp index 61ec7ee3..e5d24630 100644 --- a/src/cpp/study/patient_variability/PVGenerator.cpp +++ b/src/cpp/study/patient_variability/PVGenerator.cpp @@ -13,126 +13,81 @@ namespace pulse::study::patient_variability { - PVGenerator::PVGenerator(const std::string& logfileName, const std::string& dataDir) : Loggable(logfileName) + PVGenerator::PVGenerator(Logger* logger) : Loggable(logger) { - m_DataDir = dataDir; - m_PatientList = nullptr; - m_CompletedPatientList = nullptr; } PVGenerator::~PVGenerator() { - SAFE_DELETE(m_PatientList); - SAFE_DELETE(m_CompletedPatientList); } - void PVGenerator::GeneratePatientList(const std::string& stateDir) + void PVGenerator::GeneratePatientList(pulse::study::bind::patient_variability::PatientStateListData& pData) { int id = 0; - SAFE_DELETE(m_PatientList); - m_PatientList = new pulse::study::bind::patient_variability::PatientStateListData(); enum Sex { Male=0, Female=1 }; - unsigned int ageMin = 18; - unsigned int ageMax = 65; - unsigned int ageStep = 10; - - // Heights in inches - unsigned int heightMin_male = 65; - unsigned int heightMax_male = 73; - unsigned int heightMin_female = 60; - unsigned int heightMax_female = 67; - unsigned int heightStep = 3; - - double bmiMin = 18.5; - double bmiMax = 29; - double bmiStep = 3; - - unsigned int hrMin = 60; - unsigned int hrMax = 100; - unsigned int hrStep = 15; - - unsigned int mapMin = 70; - unsigned int mapMax = 100; - unsigned int mapStep = 10; - - unsigned int pulsePressureMin = 30; - unsigned int pulsePressureMax = 50; - unsigned int pulsePressureStep = 10; - for( int sex = Male; sex <= Female; ++sex ) { // Adjust height range based on sex - unsigned int heightMin = heightMin_male; - unsigned int heightMax = heightMax_male; + unsigned int heightMin_cm = heightMaleMin_cm; + unsigned int heightMax_cm = heightMaleMax_cm; std::string sex_dir = "male"; if( sex == Female ) { - heightMin = heightMin_female; - heightMax = heightMax_female; + heightMin_cm = heightFemaleMin_cm; + heightMax_cm = heightFemaleMax_cm; sex_dir = "female"; } - - std::string sex_path = stateDir + "/" + sex_dir; - for( unsigned int age = ageMin; age <= ageMax; age += ageStep ) + std::string sex_path = "/" + sex_dir; + + for( unsigned int age_yr = ageMin_yr; age_yr <= ageMax_yr; age_yr += ageStep_yr ) { - std::string age_path = sex_path + "/yr" + std::to_string(age); - for( unsigned int height = heightMin; height <= heightMax; height += heightStep ) + std::string age_path = sex_path + "/age_yr" + std::to_string(age_yr); + + for( unsigned int height_cm = heightMin_cm; height_cm <= heightMax_cm; height_cm += heightStep_cm ) { - std::string height_path = age_path + "/in" + std::to_string(height); + std::string height_path = age_path + "/height_cm" + std::to_string(height_cm); + for( double bmi = bmiMin; bmi <= bmiMax; bmi += bmiStep ) { - std::string bmi_path = height_path + "/bmi" + std::to_string(bmi); + std::string bmi_path = height_path + "/bmi" + pulse::cdm::to_string(bmi); - // Convert height to meters - double height_cm = height * 2.54; + // BMI = kg/m2 + // kg = BMI * m2 + double height_m = Convert(height_cm, LengthUnit::cm, LengthUnit::m); // Caclulate weight (kg) from height (m) and BMI - double weight = bmi * height_cm * height_cm * 0.0001; + double weight_kg = bmi * height_m * height_m; - for( unsigned int hr = hrMin; hr <= hrMax; hr += hrStep ) + for( unsigned int hr_bpm = hrMin_bpm; hr_bpm <= hrMax_bpm; hr_bpm += hrStep_bpm ) { - std::string hr_path = bmi_path + "/hr" + std::to_string(hr); - for( unsigned int map = mapMin; map <= mapMax; map += mapStep ) + std::string hr_path = bmi_path + "/hr_bpm" + std::to_string(hr_bpm); + + for( unsigned int map_mmHg = mapMin_mmHg; map_mmHg <= mapMax_mmHg; map_mmHg += mapStep_mmHg ) { - std::string map_path = hr_path + "/map" + std::to_string(map); - for( unsigned int pp = pulsePressureMin; pp <= pulsePressureMax; pp += pulsePressureStep ) + std::string map_path = hr_path + "/map_mmHg" + std::to_string(map_mmHg); + + for( unsigned int pp_mmHg = pulsePressureMin_mmHg; pp_mmHg <= pulsePressureMax_mmHg; pp_mmHg += pulsePressureStep_mmHg ) { - std::string full_dir_path = map_path + "/pp" + std::to_string(pp); - CreatePath(full_dir_path); - double diastolic = pp - 3 * map; - double systolic = pp - diastolic; - auto patientData = m_PatientList->add_patients(); + std::string full_dir_path = map_path + "/pp_mmHg" + std::to_string(pp_mmHg); + + // systolic - diastolic = pulse pressure + // MAP = (systolic - 2 * diastolic) / 3 + + //double diastolic_mmHg = pp_mmHg - 3 * map_mmHg; + //double systolic_mmHg = pp_mmHg - diastolic_mmHg; + auto patientData = pData.add_patient(); patientData->set_id(id); - patientData->set_age(age); - patientData->set_bmi(bmi); - patientData->set_diastolicarterialpressure_mmhg(diastolic); - patientData->set_heartrate_bpm(hr); + patientData->set_sex((pulse::cdm::bind::PatientData_eSex)sex); + patientData->set_age_yr(age_yr); patientData->set_height_cm(height_cm); - patientData->set_meanarterialpressure_mmhg(map); - patientData->set_sex((pulse::study::bind::patient_variability::PatientStateData::eSex)sex); - patientData->set_systolicarterialpressure_mmhg(systolic); - patientData->set_weight_kg(weight); - - SEPatient p(nullptr); - p.SetName(std::to_string(id++)); - if(sex == Male) - { - p.SetSex(ePatient_Sex::Male); - } - else - { - p.SetSex(ePatient_Sex::Female); - } - p.GetAge().SetValue(age, TimeUnit::yr); - p.GetHeight().SetValue(height_cm, LengthUnit::cm); - p.GetWeight().SetValue(weight, MassUnit::kg); - p.GetDiastolicArterialPressureBaseline().SetValue(diastolic, PressureUnit::mmHg); - p.GetHeartRateBaseline().SetValue(hr, FrequencyUnit::Per_min); - p.GetMeanArterialPressureBaseline().SetValue(map, PressureUnit::mmHg); - p.GetSystolicArterialPressureBaseline().SetValue(systolic, PressureUnit::mmHg); - p.SerializeToFile(full_dir_path + "/patient.json"); + patientData->set_weight_kg(weight_kg); + patientData->set_bmi(bmi); + patientData->set_heartrate_bpm(hr_bpm); + //patientData->set_diastolicarterialpressure_mmhg(diastolic_mmHg); + //patientData->set_systolicarterialpressure_mmhg(systolic_mmHg); + patientData->set_outputbasefilename(full_dir_path); } } } @@ -142,146 +97,4 @@ namespace pulse::study::patient_variability } } - bool PVGenerator::Run(const std::string& stateDir, const std::string listFilename) - { - TimingProfile profiler; - profiler.Start("Total"); - m_PatientStateListFile = listFilename; - - GeneratePatientList(stateDir); - // Get the ID's of Patients we need to run - m_PatientsToRun.clear(); - for (int i = 0; i < m_PatientList->patients_size(); i++) - m_PatientsToRun.insert(m_PatientList->patients()[i].id()); - - // Remove any id's we have in the results - SAFE_DELETE(m_CompletedPatientList); - m_CompletedPatientList = new pulse::study::bind::patient_variability::PatientStateListData(); - if (FileExists(listFilename)) - { - if (!SerializeFromFile(listFilename)) - return false; - if (m_CompletedPatientList->patients_size() > 0) - { - Info("Found " + std::to_string(m_CompletedPatientList->patients_size()) + " previously run Patients"); - for (int i = 0; i < m_CompletedPatientList->patients_size(); i++) - m_PatientsToRun.erase(m_CompletedPatientList->patients()[i].id()); - } - } - - size_t numPatientsToRun = m_PatientList->patients_size() - m_CompletedPatientList->patients_size(); - if (numPatientsToRun == 0) - { - Info("All Patients are run in the results file"); - return true; - } - size_t processor_count = std::thread::hardware_concurrency(); - if (processor_count == 0) - { - Fatal("Unable to detect number of processors"); - return false; - } - // Let's not kill the computer this is running on... - if (processor_count > 1) - processor_count -= 1; - // Let's not kick off more threads than we need - if (processor_count > numPatientsToRun) - processor_count = numPatientsToRun; - Info("Starting " + std::to_string(processor_count) + " Threads to generate " + std::to_string(numPatientsToRun) + " patients"); - // Crank up our threads - for (size_t p = 0; p < processor_count; p++) - m_Threads.push_back(std::thread(&PVGenerator::ControllerLoop, this)); - - for (size_t p = 0; p < processor_count; p++) - m_Threads[p].join(); - - Info("It took " + cdm::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this Patient list"); - profiler.Clear(); - return true; - } - - void PVGenerator::ControllerLoop() - { - pulse::study::bind::patient_variability::PatientStateData* p; - while (true) - { - p = GetNextPatient(); - if (p == nullptr) - break; - GenerateStabilizedPatient(*p, false); - FinalizePatient(*p); - } - } - - bool PVGenerator::GenerateStabilizedPatient(pulse::study::bind::patient_variability::PatientStateData& pData, bool logToConsole) - { - return true; - } - - pulse::study::bind::patient_variability::PatientStateData* PVGenerator::GetNextPatient() - { - m_mutex.lock(); - pulse::study::bind::patient_variability::PatientStateData* p = nullptr; - if (!m_PatientsToRun.empty()) - { - auto id = *m_PatientsToRun.begin(); - for (int i = 0; i < m_PatientList->patients_size(); i++) - { - p = &(*m_PatientList->mutable_patients())[i]; - if (p->id() == id) - break; - } - Info("Generating Patient ID " + std::to_string(id)); - m_PatientsToRun.erase(id); - } - m_mutex.unlock(); - return p; - } - - void PVGenerator::FinalizePatient(pulse::study::bind::patient_variability::PatientStateData& p) - { - m_mutex.lock(); - auto ps = m_CompletedPatientList->mutable_patients()->Add(); - ps->CopyFrom(p); - SerializeToFile(*m_CompletedPatientList, m_PatientStateListFile); - Info("Completed Patient " + std::to_string(m_CompletedPatientList->patients_size()) + " of " + std::to_string(m_PatientList->patients_size())); - m_mutex.unlock(); - } - - bool PVGenerator::SerializeToString(pulse::study::bind::patient_variability::PatientStateListData& src, std::string& output, eSerializationFormat f) const - { - google::protobuf::util::JsonPrintOptions printOpts; - printOpts.add_whitespace = true; - printOpts.preserve_proto_field_names = true; - printOpts.always_print_primitive_fields = true; - if (!google::protobuf::util::MessageToJsonString(src, &output, printOpts).ok()) - { - Error("Unable to serialize Patient list"); - return false; - } - return true; - } - bool PVGenerator::SerializeToFile(pulse::study::bind::patient_variability::PatientStateListData& src, const std::string& filename) const - { - return PBUtils::SerializeToFile(src, filename, GetLogger()); - } - bool PVGenerator::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::PatientStateListData& dst, eSerializationFormat f) - { - google::protobuf::util::JsonParseOptions parseOpts; - google::protobuf::SetLogHandler([](google::protobuf::LogLevel level, const char* filename, int line, const std::string& message) - { - std::cout << "[" << level << "] " << filename << "::" << line << " " << message; - }); - google::protobuf::util::Status stat = google::protobuf::util::JsonStringToMessage(src, &dst, parseOpts); - if (!stat.ok()) - { - Error("Unable to parse json in string"); - return false; - } - return true; - } - bool PVGenerator::SerializeFromFile(const std::string& filename) - { - return PBUtils::SerializeFromFile(filename, *m_CompletedPatientList, GetLogger()); - } } \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVGenerator.h b/src/cpp/study/patient_variability/PVGenerator.h index fc501b55..bacd03e5 100644 --- a/src/cpp/study/patient_variability/PVGenerator.h +++ b/src/cpp/study/patient_variability/PVGenerator.h @@ -2,39 +2,53 @@ See accompanying NOTICE file for details.*/ #pragma once -#include "PVEngine.h" + +#pragma once +#include "PulseEngine.h" +#include "cdm/patient/SEPatient.h" + +PUSH_PROTO_WARNINGS +#include "pulse/cdm/bind/Patient.pb.h" +#include "pulse/study/bind/PatientVariability.pb.h" +#include +#include +POP_PROTO_WARNINGS +#include "io/protobuf/PBUtils.h" namespace pulse::study::patient_variability { class PVGenerator : public Loggable { public: - PVGenerator(const std::string& logfileName, const std::string& dataDir = "."); + PVGenerator(Logger* logger=nullptr); virtual ~PVGenerator(); - bool Run(const std::string& stateDir, const std::string listFilename); + unsigned int ageMin_yr = 18; + unsigned int ageMax_yr = 65; + unsigned int ageStep_yr = 10; + + unsigned int heightMaleMin_cm = 165; + unsigned int heightMaleMax_cm = 186; + unsigned int heightFemaleMin_cm = 153; + unsigned int heightFemaleMax_cm = 170; + unsigned int heightStep_cm = 7; - static bool GenerateStabilizedPatient(pulse::study::bind::patient_variability::PatientStateData& pData, bool logToConsole); + double bmiMin = 18.5; + double bmiMax = 29; + double bmiStep = 3; - protected: - bool SerializeToString(pulse::study::bind::patient_variability::PatientStateListData& src, std::string& dst, eSerializationFormat f) const; - bool SerializeToFile(pulse::study::bind::patient_variability::PatientStateListData& src, const std::string& filename) const; - bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::PatientStateListData& dst, eSerializationFormat f); - bool SerializeFromFile(const std::string& filename); + unsigned int hrMin_bpm = 60; + unsigned int hrMax_bpm = 100; + unsigned int hrStep_bpm = 15; - void GeneratePatientList(const std::string& stateDir); - void ControllerLoop(); - void FinalizePatient(pulse::study::bind::patient_variability::PatientStateData& sim); - pulse::study::bind::patient_variability::PatientStateData* GetNextPatient(); + unsigned int mapMin_mmHg = 70; + unsigned int mapMax_mmHg = 100; + unsigned int mapStep_mmHg = 10; - std::string m_DataDir; - std::mutex m_mutex; - bool m_Running; + unsigned int pulsePressureMin_mmHg = 30; + unsigned int pulsePressureMax_mmHg = 50; + unsigned int pulsePressureStep_mmHg = 10; - std::string m_PatientStateListFile; - std::set m_PatientsToRun; - std::vector m_Threads; - pulse::study::bind::patient_variability::PatientStateListData* m_PatientList; - pulse::study::bind::patient_variability::PatientStateListData* m_CompletedPatientList; + void GeneratePatientList(pulse::study::bind::patient_variability::PatientStateListData& pData); }; } \ No newline at end of file diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index 9213ca94..0207e0ed 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -3,56 +3,72 @@ #include "PVRunner.h" +#include "engine/PulseConfiguration.h" + +#include "cdm/patient/SEPatient.h" +#include "cdm/engine/SEEngineTracker.h" +#include "cdm/engine/SEDataRequestManager.h" +#include "cdm/engine/SEPatientConfiguration.h" +#include "cdm/utils/DataTrack.h" +#include "cdm/utils/FileUtils.h" +#include "cdm/utils/GeneralMath.h" +#include "cdm/utils/TimingProfile.h" +#include "cdm/properties/SEScalarFrequency.h" +#include "cdm/properties/SEScalarLength.h" +#include "cdm/properties/SEScalarMass.h" +#include "cdm/properties/SEScalarPressure.h" + using namespace pulse; namespace pulse::study::patient_variability { - PVRunner::PVRunner(const std::string& logfileName, const std::string& dataDir) : Loggable(logfileName) + PVRunner::PVRunner(Logger* logger) : Loggable(logger) { - m_DataDir = dataDir; - m_SimulationList = nullptr; - m_SimulationResultsList = nullptr; + m_PatientList = nullptr; + m_PatientResultsList = nullptr; } PVRunner::~PVRunner() { - SAFE_DELETE(m_SimulationList); - SAFE_DELETE(m_SimulationResultsList); + SAFE_DELETE(m_PatientList); + SAFE_DELETE(m_PatientResultsList); } - bool PVRunner::Run(pulse::study::bind::patient_variability::SimulationListData& simList, const std::string& resultsFilename) + bool PVRunner::Run(pulse::study::bind::patient_variability::PatientStateListData& simList, const std::string& rootDir) { - m_SimulationResultsListFile = simList.outputrootdir() + "/" + resultsFilename; - SAFE_DELETE(m_SimulationList); - SAFE_DELETE(m_SimulationResultsList); - m_SimulationList = &simList; - m_SimulationResultsList = new pulse::study::bind::patient_variability::SimulationListData(); - if (FileExists(m_SimulationResultsListFile)) + m_RootDir = rootDir; + m_PatientResultsListFile = rootDir + "/patient_results.json"; + SAFE_DELETE(m_PatientList); + SAFE_DELETE(m_PatientResultsList); + m_PatientList = &simList; + m_PatientResultsList = new pulse::study::bind::patient_variability::PatientStateListData(); + if (FileExists(m_PatientResultsListFile)) { - if (!SerializeFromFile(m_SimulationResultsListFile, *m_SimulationResultsList, eSerializationFormat::JSON)) + if (!SerializeFromFile(m_PatientResultsListFile, *m_PatientResultsList)) { GetLogger()->Warning("Unable to read found results file"); } } bool b = Run(); - m_SimulationList = nullptr; - SAFE_DELETE(m_SimulationResultsList); + m_PatientList = nullptr; + SAFE_DELETE(m_PatientResultsList); return b; } - bool PVRunner::Run(const std::string& filename, eSerializationFormat f) + bool PVRunner::Run(const std::string& filename, const std::string& rootDir) { - SAFE_DELETE(m_SimulationList); - SAFE_DELETE(m_SimulationResultsList); - m_SimulationList = new pulse::study::bind::patient_variability::SimulationListData(); - m_SimulationResultsList = new pulse::study::bind::patient_variability::SimulationListData(); + m_RootDir = rootDir; + SAFE_DELETE(m_PatientList); + SAFE_DELETE(m_PatientResultsList); + m_PatientList = new pulse::study::bind::patient_variability::PatientStateListData(); + m_PatientResultsList = new pulse::study::bind::patient_variability::PatientStateListData(); - if (!SerializeFromFile(filename, *m_SimulationList, eSerializationFormat::JSON)) + if (!SerializeFromFile(filename, *m_PatientList)) return false; // Let's try to read in a results file - m_SimulationResultsListFile = filename.substr(0, filename.length() - 5) + "_results.json"; - if (FileExists(m_SimulationResultsListFile)) + m_PatientResultsListFile = rootDir + "/patient_results.json"; + if (FileExists(m_PatientResultsListFile)) { - if (!SerializeFromFile(m_SimulationResultsListFile, *m_SimulationResultsList, eSerializationFormat::JSON)) + if (!SerializeFromFile(m_PatientResultsListFile, *m_PatientResultsList)) { GetLogger()->Warning("Unable to read found results file"); } @@ -64,25 +80,25 @@ namespace pulse::study::patient_variability TimingProfile profiler; profiler.Start("Total"); - // Get the ID's of simulations we need to run - m_SimulationsToRun.clear(); - for (int i = 0; i < m_SimulationList->simulations_size(); i++) - m_SimulationsToRun.insert(m_SimulationList->simulations()[i].id()); + // Get the ID's of Patients we need to run + m_PatientsToRun.clear(); + for (int i = 0; i < m_PatientList->patient_size(); i++) + m_PatientsToRun.insert(m_PatientList->patient()[i].id()); // Remove any id's we have in the results - if (m_SimulationResultsList->simulations_size() > 0) + if (m_PatientResultsList->patient_size() > 0) { - Info("Found " + std::to_string(m_SimulationResultsList->simulations_size()) + " previously run simulations"); - for (int i = 0; i < m_SimulationResultsList->simulations_size(); i++) - m_SimulationsToRun.erase(m_SimulationResultsList->simulations()[i].id()); + Info("Found " + std::to_string(m_PatientResultsList->patient_size()) + " previously run Patients"); + for (int i = 0; i < m_PatientResultsList->patient_size(); i++) + m_PatientsToRun.erase(m_PatientResultsList->patient()[i].id()); } - size_t numSimsToRun = m_SimulationList->simulations_size() - m_SimulationResultsList->simulations_size(); + size_t numSimsToRun = m_PatientList->patient_size() - m_PatientResultsList->patient_size(); if (numSimsToRun == 0) { - Info("All simulations are run in the results file"); + Info("All Patients are run in the results file"); return true; } - size_t processor_count = std::thread::hardware_concurrency(); + size_t processor_count = 1;// std::thread::hardware_concurrency(); if (processor_count == 0) { Fatal("Unable to detect number of processors"); @@ -94,7 +110,7 @@ namespace pulse::study::patient_variability // Let's not kick off more threads than we need if (processor_count > numSimsToRun) processor_count = numSimsToRun; - Info("Starting " + std::to_string(processor_count) + " Threads to run " + std::to_string(m_SimulationsToRun.size()) + " simulations"); + Info("Starting " + std::to_string(processor_count) + " Threads to run " + std::to_string(m_PatientsToRun.size()) + " Patients"); // Crank up our threads for (size_t p = 0; p < processor_count; p++) m_Threads.push_back(std::thread(&PVRunner::ControllerLoop, this)); @@ -102,124 +118,134 @@ namespace pulse::study::patient_variability for (size_t p = 0; p < processor_count; p++) m_Threads[p].join(); - Info("It took " + std::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this simulation list"); + Info("It took " + std::to_string(profiler.GetElapsedTime_s("Total")) + "s to run this Patient list"); profiler.Clear(); return true; } void PVRunner::ControllerLoop() { - pulse::study::bind::patient_variability::SimulationData* sim = nullptr; + CreatePath(m_RootDir); + + pulse::study::bind::patient_variability::PatientStateData* patient = nullptr; while (true) { try { - sim = GetNextSimulation(); - if (sim == nullptr) + patient = GetNextPatient(); + if (patient == nullptr) break; - RunSimulationUntilStable(*sim); - FinalizeSimulation(*sim); + if(!RunPatient(*patient)) + GetLogger()->Error("Unable to run patient " + patient->outputbasefilename()); } catch (CommonDataModelException& cdm_ex) { - GetLogger()->Fatal("Exception caught runnning simulation " + sim->outputbasefilename()); + GetLogger()->Fatal("Exception caught runnning Patient " + patient->outputbasefilename()); GetLogger()->Fatal(cdm_ex.what()); std::cerr << cdm_ex.what() << std::endl; } catch (std::exception& ex) { - GetLogger()->Fatal("Exception caught runnning simulation " + sim->outputbasefilename()); + GetLogger()->Fatal("Exception caught runnning Patient " + patient->outputbasefilename()); GetLogger()->Fatal(ex.what()); std::cerr << ex.what() << std::endl; } catch (...) { - std::cerr << "Unable to run simulation " << sim->outputbasefilename() << std::endl; + std::cerr << "Unable to run Patient " << patient->outputbasefilename() << std::endl; } } } - bool PVRunner::RunSimulationUntilStable(pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir) + bool PVRunner::RunPatient(pulse::study::bind::patient_variability::PatientStateData& patient) { TimingProfile profiler; profiler.Start("Total"); profiler.Start("Status"); auto pulse = CreatePulseEngine(); - pulse->GetLogger()->SetLogFile(sim.outputbasefilename() + ".log"); - // No logging to console (when threaded) pulse->GetLogger()->LogToConsole(false); + // But, do write a log file + pulse->GetLogger()->SetLogFile(m_RootDir + patient.outputbasefilename() + "/patient.log"); + // Write out the computed patient basline values so we can see how well we met them + PulseConfiguration cfg; + cfg.EnableWritePatientBaselineFile(eSwitch::On); + cfg.SetInitialPatientBaselineFilepath(m_RootDir + patient.outputbasefilename() + "/patient.init.json"); + pulse->SetConfigurationOverride(&cfg); + // Setup data requests - //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("CardiacOutput", VolumePerTimeUnit::mL_Per_min); - //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("BloodVolume", VolumeUnit::mL); - //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("HeartRate", FrequencyUnit::Per_min); - //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("MeanArterialPressure", PressureUnit::mmHg); - //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("IntracranialPressure", PressureUnit::mmHg); - //pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("CerebralPerfusionPressure", PressureUnit::mmHg); - //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "Pressure", PressureUnit::mmHg); - //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "Volume", VolumeUnit::mL); - //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "InFlow", VolumePerTimeUnit::mL_Per_min); - //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::VascularCompartment::Brain, "Oxygen", "PartialPressure"); - //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::CerebrospinalFluidCompartment::IntracranialSpace, "Volume", VolumeUnit::mL); - //pulse->GetEngineTracker()->GetDataRequestManager().CreateLiquidCompartmentDataRequest(pulse::CerebrospinalFluidCompartment::IntracranialSpace, "Pressure", PressureUnit::mmHg); - //pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(outDir + "/" + std::to_string(sim.id()) + " - " + sim.name() + ".csv"); + // TODO Read in all System and the one Patient validation scenarios + // Add in all the data requests from all of those files + // Create 1 big massive CSV file + pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("HeartRate", FrequencyUnit::Per_min); + pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(m_RootDir + patient.outputbasefilename() + "/patient.csv"); - // Stabilize the engine + // Create our patient SEPatientConfiguration pc; - pc.SetPatientFile("./patients/StandardMale.json"); + SEPatient& p = pc.GetPatient(); + p.SetName("Patient"+patient.id()); + p.SetSex((ePatient_Sex)patient.sex()); + p.GetAge().SetValue(patient.age_yr(), TimeUnit::yr); + p.GetHeight().SetValue(patient.height_cm(), LengthUnit::cm); + p.GetWeight().SetValue(patient.weight_kg(), MassUnit::kg); + p.GetHeartRateBaseline().SetValue(patient.heartrate_bpm(), FrequencyUnit::Per_min); + //p.GetSystolicArterialPressureBaseline().SetValue(patient.systolicarterialpressure_mmhg(), PressureUnit::mmHg); + //p.GetDiastolicArterialPressureBaseline().SetValue(patient.diastolicarterialpressure_mmhg(), PressureUnit::mmHg); + p.SerializeToFile(m_RootDir + patient.outputbasefilename() + "/patient.json"); + if (!pulse->InitializeEngine(pc)) { - sim.set_achievedstabilization(false); - sim.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); + patient.set_achievedstabilization(false); + patient.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); return false; } + patient.set_achievedstabilization(true); + patient.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); + pulse->GetLogger()->Info("It took " + cdm::to_string(patient.stabilizationtime_s()) + "s to run this Patient"); - pulse->GetLogger()->Info("It took " + cdm::to_string(sim.stabilizationtime_s()) + "s to run this simulation"); + // TODO Run the Java System and Patient validation scripts + // This will probably be a new java class that calls existing validation classes + // And we will need to provide the patient.json file to it so it can push data to the xlsx + // That java class should write out a report or something to our patient.outputbasefilename + + // Add our results to our results file + m_mutex.lock(); + auto pResult = m_PatientResultsList->add_patient(); + pResult->CopyFrom(patient); + SerializeToFile(*m_PatientResultsList, m_PatientResultsListFile); + Info("Completed Simulation " + std::to_string(m_PatientResultsList->patient_size()) + " of " + std::to_string(m_PatientList->patient_size())); + if (patient.achievedstabilization()) + Info(" Stabilized : " + patient.outputbasefilename()); + else + Info(" FAILED STABILIZATION : " + patient.outputbasefilename()); + m_mutex.unlock(); profiler.Clear(); return true; } - pulse::study::bind::patient_variability::SimulationData* PVRunner::GetNextSimulation() + pulse::study::bind::patient_variability::PatientStateData* PVRunner::GetNextPatient() { m_mutex.lock(); - pulse::study::bind::patient_variability::SimulationData* sim = nullptr; - if (!m_SimulationsToRun.empty()) + pulse::study::bind::patient_variability::PatientStateData* patient = nullptr; + if (!m_PatientsToRun.empty()) { - auto id = *m_SimulationsToRun.begin(); - for (int i = 0; i < m_SimulationList->simulations_size(); i++) + auto id = *m_PatientsToRun.begin(); + for (int i = 0; i < m_PatientList->patient_size(); i++) { - sim = &(*m_SimulationList->mutable_simulations())[i]; - if (sim->id() == id) + patient = &(*m_PatientList->mutable_patient())[i]; + if (patient->id() == id) break; } - Info("Simulating Run " + std::to_string(id)); - m_SimulationsToRun.erase(id); + Info("Running Patient " + std::to_string(id)); + m_PatientsToRun.erase(id); } m_mutex.unlock(); - return sim; - } - - void PVRunner::FinalizeSimulation(pulse::study::bind::patient_variability::SimulationData& sim) - { - m_mutex.lock(); - auto rSim = m_SimulationResultsList->mutable_simulations()->Add(); - rSim->CopyFrom(sim); - SerializeToFile(*m_SimulationResultsList, m_SimulationResultsListFile, eSerializationFormat::JSON); - Info("Completed Simulation " + std::to_string(m_SimulationResultsList->simulations_size()) + " of " + std::to_string(m_SimulationList->simulations_size())); - if (sim.achievedstabilization()) - Info(" Stabilized Run " + std::to_string(sim.id())); - else - Info(" FAILED STABILIZATION FOR RUN " + std::to_string(sim.id())); - std::ofstream plots; - plots.open(m_SimulationList->outputrootdir() + "/plot_pairs.config", std::fstream::in | std::fstream::out | std::fstream::app); - plots << sim.outputbasefilename() << "multiplex_patient_0_results.csv, " << sim.outputbasefilename() << "multiplex_patient_1_results.csv\n"; - plots.close(); - m_mutex.unlock(); + return patient; } - bool PVRunner::SerializeToString(pulse::study::bind::patient_variability::SimulationListData& src, std::string& output, eSerializationFormat f) const + bool PVRunner::SerializeToString(pulse::study::bind::patient_variability::PatientStateListData& src, std::string& output) const { google::protobuf::util::JsonPrintOptions printOpts; printOpts.add_whitespace = true; @@ -227,16 +253,16 @@ namespace pulse::study::patient_variability printOpts.always_print_primitive_fields = true; if (!google::protobuf::util::MessageToJsonString(src, &output, printOpts).ok()) { - Error("Unable to serialize simulation list"); + Error("Unable to serialize Patient list"); return false; } return true; } - bool PVRunner::SerializeToFile(pulse::study::bind::patient_variability::SimulationListData& src, const std::string& filename, eSerializationFormat f) const + bool PVRunner::SerializeToFile(pulse::study::bind::patient_variability::PatientStateListData& src, const std::string& filename) const { return PBUtils::SerializeToFile(src, filename, GetLogger()); } - bool PVRunner::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f) + bool PVRunner::SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::PatientStateListData& dst) { google::protobuf::util::JsonParseOptions parseOpts; google::protobuf::SetLogHandler([](google::protobuf::LogLevel level, const char* filename, int line, const std::string& message) @@ -251,7 +277,7 @@ namespace pulse::study::patient_variability } return true; } - bool PVRunner::SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f) + bool PVRunner::SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::PatientStateListData& dst) { return PBUtils::SerializeFromFile(filename, dst, GetLogger()); } diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h index 919281ca..4ee1838e 100644 --- a/src/cpp/study/patient_variability/PVRunner.h +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -2,40 +2,46 @@ See accompanying NOTICE file for details.*/ #pragma once -#include "PVEngine.h" +#include +#include "PulseEngine.h" + +PUSH_PROTO_WARNINGS +#include "pulse/study/bind/PatientVariability.pb.h" +#include +#include +POP_PROTO_WARNINGS +#include "io/protobuf/PBUtils.h" namespace pulse::study::patient_variability { class PVRunner : public Loggable { public: - PVRunner(const std::string& logfileName, const std::string& dataDir = "."); + PVRunner(Logger* logger=nullptr); virtual ~PVRunner(); - bool Run(const std::string& filename, eSerializationFormat f); - bool Run(pulse::study::bind::patient_variability::SimulationListData& simList, const std::string& resultsFilename); - - bool RunSimulationUntilStable(pulse::study::bind::patient_variability::SimulationData& sim, const std::string& dataDir = "./"); + bool Run(const std::string& filename, const std::string& rootDir); + bool Run(pulse::study::bind::patient_variability::PatientStateListData& patients, const std::string& rootDir); protected: bool Run(); - bool SerializeToString(pulse::study::bind::patient_variability::SimulationListData& src, std::string& dst, eSerializationFormat f) const; - bool SerializeToFile(pulse::study::bind::patient_variability::SimulationListData& src, const std::string& filename, eSerializationFormat f) const; - bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f); - bool SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::SimulationListData& dst, eSerializationFormat f); + bool SerializeToString(pulse::study::bind::patient_variability::PatientStateListData& src, std::string& dst) const; + bool SerializeToFile(pulse::study::bind::patient_variability::PatientStateListData& src, const std::string& filename) const; + bool SerializeFromString(const std::string& src, pulse::study::bind::patient_variability::PatientStateListData& dst); + bool SerializeFromFile(const std::string& filename, pulse::study::bind::patient_variability::PatientStateListData& dst); void ControllerLoop(); - void FinalizeSimulation(pulse::study::bind::patient_variability::SimulationData& sim); - pulse::study::bind::patient_variability::SimulationData* GetNextSimulation(); + bool RunPatient(pulse::study::bind::patient_variability::PatientStateData& patient); + pulse::study::bind::patient_variability::PatientStateData* GetNextPatient(); std::mutex m_mutex; bool m_Running; - std::string m_DataDir; - std::string m_SimulationResultsListFile; - std::set m_SimulationsToRun; + std::string m_RootDir; + std::string m_PatientResultsListFile; + std::set m_PatientsToRun; std::vector m_Threads; - pulse::study::bind::patient_variability::SimulationListData* m_SimulationList; - pulse::study::bind::patient_variability::SimulationListData* m_SimulationResultsList; + pulse::study::bind::patient_variability::PatientStateListData* m_PatientList; + pulse::study::bind::patient_variability::PatientStateListData* m_PatientResultsList; }; } \ No newline at end of file diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp index 585e3291..9c213ff1 100644 --- a/src/cpp/study/patient_variability/main.cpp +++ b/src/cpp/study/patient_variability/main.cpp @@ -10,31 +10,90 @@ using namespace pulse::study::patient_variability; int main(int argc, char* argv[]) { + bool clear = true; std::string mode = ""; // Default is to run the manual else below if (argc <= 1) { - // Adjust comments to run the mode you want - //mode = "clear"; - mode = "genPatients"; + mode = "test"; } else { mode = argv[1]; } - - if(mode == "genPatients") + std::string rootDir = "./test_results/patient_variability/"; + + if(clear) + DeleteDirectory(rootDir); + + pulse::study::bind::patient_variability::PatientStateListData patients; + + Logger log; + log.LogToConsole(true); + log.SetLogFile(rootDir +"PatientVariability.log"); + + if(mode == "full") { - PVGenerator pvg("./test_results/patient_variability/PatientVariabilityGen.log"); - pulse::study::bind::patient_variability::SimulationListData simList; - simList.set_outputrootdir("./test_results/patient_variability"); + PVGenerator pvg(&log); + pvg.ageMin_yr = 18; + pvg.ageMax_yr = 65; + pvg.ageStep_yr = 10; + + pvg.heightMaleMin_cm = 165; + pvg.heightMaleMax_cm = 186; + pvg.heightFemaleMin_cm = 153; + pvg.heightFemaleMax_cm = 170; + pvg.heightStep_cm = 7; + + pvg.bmiMin = 18.5; + pvg.bmiMax = 29; + pvg.bmiStep = 3; + + pvg.hrMin_bpm = 60; + pvg.hrMax_bpm = 100; + pvg.hrStep_bpm = 15; + + pvg.mapMin_mmHg = 70; + pvg.mapMax_mmHg = 100; + pvg.mapStep_mmHg = 10; - return !pvg.Run("./test_results/patient_variability", "./test_results/patient_variability/states_list.json"); + pvg.pulsePressureMin_mmHg = 30; + pvg.pulsePressureMax_mmHg = 50; + pvg.pulsePressureStep_mmHg = 10; + + pvg.GeneratePatientList(patients); } - else if(mode == "clear") + else if (mode == "test") { - DeleteDirectory("./test_results/patient_variability"); - } + PVGenerator pvg(&log); + pvg.ageMin_yr = 18; + pvg.ageMax_yr = 65; + pvg.ageStep_yr = 50; + + pvg.heightMaleMin_cm = 165; + pvg.heightMaleMax_cm = 186; + pvg.heightFemaleMin_cm = 153; + pvg.heightFemaleMax_cm = 170; + pvg.heightStep_cm = 22; + + pvg.bmiMin = 18.5; + pvg.bmiMax = 29; + pvg.bmiStep = 30; + pvg.hrMin_bpm = 60; + pvg.hrMax_bpm = 100; + pvg.hrStep_bpm = 150; + + pvg.mapMin_mmHg = 70; + pvg.mapMax_mmHg = 100; + pvg.mapStep_mmHg = 100; + + pvg.pulsePressureMin_mmHg = 30; + pvg.pulsePressureMax_mmHg = 50; + pvg.pulsePressureStep_mmHg = 100; + + pvg.GeneratePatientList(patients); + } - return 0; + PVRunner pvr(&log); + return !pvr.Run(patients, rootDir); } \ No newline at end of file diff --git a/src/schema/pulse/engine/bind/Configuration.proto b/src/schema/pulse/engine/bind/Configuration.proto index dbac2263..197a1b45 100644 --- a/src/schema/pulse/engine/bind/Configuration.proto +++ b/src/schema/pulse/engine/bind/Configuration.proto @@ -187,21 +187,22 @@ message ConfigurationData pulse.cdm.bind.TimedStabilizationData TimedStabilization = 4;/**<< @brief */ pulse.cdm.bind.DynamicStabilizationData DynamicStabilization = 5;/**<< @brief */ } - pulse.cdm.bind.eSwitch WritePatientBaselineFile = 6;/**<< @brief Inform execution to write out patient object after stabilization completes. */ - BloodChemistryConfigurationData BloodChemistryConfiguration = 7; - CardiovascularConfigurationData CardiovascularConfiguration = 8; - CircuitConfigurationData CircuitConfiguration = 9; - ConstantsConfigurationData ConstantsConfiguration = 10; - DrugsConfigurationData DrugsConfiguration = 11; - ECGConfigurationData ECGConfiguration = 12; - EnergyConfigurationData EnergyConfiguration = 13; - EnvironmentConfigurationData EnvironmentConfiguration = 14; - GastrointestinalConfigurationData GastrointestinalConfiguration = 15; - NervousConfigurationData NervousConfiguration = 16; - RenalConfigurationData RenalConfiguration = 17; - RespiratoryConfigurationData RespiratoryConfiguration = 18; - TissueConfigurationData TissueConfiguration = 19; - map Modifiers = 20; - map Overrides = 21; + pulse.cdm.bind.eSwitch WritePatientBaselineFile = 6;/**<< @brief Inform execution to write out patient object after all patient values are computed. */ + string PatientBaselineFilePath = 7;/**<< @brief Optional filepath of the original patient file to write, if not it will be written to ./stable */ + BloodChemistryConfigurationData BloodChemistryConfiguration = 8; + CardiovascularConfigurationData CardiovascularConfiguration = 9; + CircuitConfigurationData CircuitConfiguration = 10; + ConstantsConfigurationData ConstantsConfiguration = 11; + DrugsConfigurationData DrugsConfiguration = 12; + ECGConfigurationData ECGConfiguration = 13; + EnergyConfigurationData EnergyConfiguration = 14; + EnvironmentConfigurationData EnvironmentConfiguration = 15; + GastrointestinalConfigurationData GastrointestinalConfiguration = 16; + NervousConfigurationData NervousConfiguration = 17; + RenalConfigurationData RenalConfiguration = 18; + RespiratoryConfigurationData RespiratoryConfiguration = 19; + TissueConfigurationData TissueConfiguration = 20; + map Modifiers = 21; + map Overrides = 22; } \ No newline at end of file diff --git a/src/schema/pulse/study/bind/PatientVariability.proto b/src/schema/pulse/study/bind/PatientVariability.proto index 040e16ca..dd7cf0c0 100644 --- a/src/schema/pulse/study/bind/PatientVariability.proto +++ b/src/schema/pulse/study/bind/PatientVariability.proto @@ -4,38 +4,30 @@ option java_package = "com.kitware.pulse.study.bind.patient_variability"; option csharp_namespace = "pulse.study.bind.patient_variability"; option optimize_for = SPEED; +import "pulse/cdm/bind/Patient.proto"; + message PatientStateData { - /** @brief Enumeration for patient sex */ - enum eSex - { - Male=0; /**<< @brief Male patient. */ - Female=1; /**<< @brief Female patient. */ - } - uint32 ID = 1; - string StateFile = 2; + uint32 ID = 1; + string OutputBaseFilename = 2; // Initial Conditions - uint32 Age = 3; - double BMI = 4; - double DiastolicArterialPressure_mmHg = 5; - double HeartRate_bpm = 6; - double Height_cm = 7; - double MeanArterialPressure_mmHg = 8; - eSex Sex = 9; - double SystolicArterialPressure_mmHg = 10; - double Weight_kg = 11; + pulse.cdm.bind.PatientData.eSex Sex = 3; + uint32 Age_yr = 4; + double Height_cm = 5; + double Weight_kg = 6; + double BMI = 7; + double HeartRate_bpm = 8; + double DiastolicArterialPressure_mmHg = 9; + double SystolicArterialPressure_mmHg = 10; + // Results + bool AchievedStabilization = 11; + double StabilizationTime_s = 12; } message PatientStateListData { - repeated PatientStateData Patients = 1; -} - -message PatientComparisonData -{ - PatientStateData SoloVentilation = 1; - PatientStateData MultiplexVentilation = 2; + repeated PatientStateData Patient = 1; } message LogData @@ -45,27 +37,3 @@ message LogData repeated string Error = 3; repeated string Fatal = 4; } - -message SimulationData -{ - // A filename without an extension (can/should have path also) - // The engine will use this to create multiple output files (*.log and *.csv) - uint32 ID = 1; - uint32 GroupID = 2; - string OutputBaseFilename = 3; - bool AchievedStabilization = 4; - double StabilizationTime_s = 5; - double RespirationRate_Per_min = 6; - double IERatio = 7; - double PIP_cmH2O = 8; - double PEEP_cmH2O = 9; - double FiO2 = 10; - LogData Log = 11; - repeated PatientComparisonData PatientComparisons = 12; -} - -message SimulationListData -{ - string OutputRootDir = 1; - repeated SimulationData Simulations = 2; -} -- GitLab From 74a02d19be740c731d083745c7cd328938c90c74 Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Mon, 4 Apr 2022 08:59:48 -0400 Subject: [PATCH 009/115] Add the sys/dia pressure calc back in to patient study Was a miscommunication in equations --- src/cpp/study/patient_variability/PVGenerator.cpp | 10 +++++----- src/cpp/study/patient_variability/PVRunner.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cpp/study/patient_variability/PVGenerator.cpp b/src/cpp/study/patient_variability/PVGenerator.cpp index e5d24630..013394a0 100644 --- a/src/cpp/study/patient_variability/PVGenerator.cpp +++ b/src/cpp/study/patient_variability/PVGenerator.cpp @@ -73,10 +73,10 @@ namespace pulse::study::patient_variability std::string full_dir_path = map_path + "/pp_mmHg" + std::to_string(pp_mmHg); // systolic - diastolic = pulse pressure - // MAP = (systolic - 2 * diastolic) / 3 + // MAP = (systolic + 2 * diastolic) / 3 + double diastolic_mmHg = (3 * map_mmHg - pp_mmHg) / 3; + double systolic_mmHg = pp_mmHg + diastolic_mmHg; - //double diastolic_mmHg = pp_mmHg - 3 * map_mmHg; - //double systolic_mmHg = pp_mmHg - diastolic_mmHg; auto patientData = pData.add_patient(); patientData->set_id(id); patientData->set_sex((pulse::cdm::bind::PatientData_eSex)sex); @@ -85,8 +85,8 @@ namespace pulse::study::patient_variability patientData->set_weight_kg(weight_kg); patientData->set_bmi(bmi); patientData->set_heartrate_bpm(hr_bpm); - //patientData->set_diastolicarterialpressure_mmhg(diastolic_mmHg); - //patientData->set_systolicarterialpressure_mmhg(systolic_mmHg); + patientData->set_diastolicarterialpressure_mmhg(diastolic_mmHg); + patientData->set_systolicarterialpressure_mmhg(systolic_mmHg); patientData->set_outputbasefilename(full_dir_path); } } diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index 0207e0ed..1766f292 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -190,8 +190,8 @@ namespace pulse::study::patient_variability p.GetHeight().SetValue(patient.height_cm(), LengthUnit::cm); p.GetWeight().SetValue(patient.weight_kg(), MassUnit::kg); p.GetHeartRateBaseline().SetValue(patient.heartrate_bpm(), FrequencyUnit::Per_min); - //p.GetSystolicArterialPressureBaseline().SetValue(patient.systolicarterialpressure_mmhg(), PressureUnit::mmHg); - //p.GetDiastolicArterialPressureBaseline().SetValue(patient.diastolicarterialpressure_mmhg(), PressureUnit::mmHg); + p.GetSystolicArterialPressureBaseline().SetValue(patient.systolicarterialpressure_mmhg(), PressureUnit::mmHg); + p.GetDiastolicArterialPressureBaseline().SetValue(patient.diastolicarterialpressure_mmhg(), PressureUnit::mmHg); p.SerializeToFile(m_RootDir + patient.outputbasefilename() + "/patient.json"); if (!pulse->InitializeEngine(pc)) -- GitLab From 8c0fbff1a97c4a697dbda62c2ec08e472eaea22a Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Tue, 5 Apr 2022 10:21:35 -0500 Subject: [PATCH 010/115] get all data requests, split CSV --- src/cpp/cdm/PhysiologyEngineThunk.cpp | 2 +- src/cpp/cdm/engine/SEDataRequest.cpp | 135 ++++++++++++++++ src/cpp/cdm/engine/SEDataRequest.h | 3 +- src/cpp/cdm/engine/SEEngineTracker.cpp | 145 ++---------------- src/cpp/cdm/engine/SEEngineTracker.h | 2 - src/cpp/cdm/utils/CSV.cpp | 79 ++++++++++ src/cpp/cdm/utils/CSV.h | 3 + .../study/patient_variability/PVRunner.cpp | 48 +++++- src/cpp/study/patient_variability/PVRunner.h | 3 + 9 files changed, 275 insertions(+), 145 deletions(-) diff --git a/src/cpp/cdm/PhysiologyEngineThunk.cpp b/src/cpp/cdm/PhysiologyEngineThunk.cpp index 58e1bb9b..2f2f4fdd 100644 --- a/src/cpp/cdm/PhysiologyEngineThunk.cpp +++ b/src/cpp/cdm/PhysiologyEngineThunk.cpp @@ -153,7 +153,7 @@ bool PhysiologyEngineThunk::SetupRequests() m_engine->Error("-- " + m_engine->GetEngineTracker()->GetDataTrack().GetProbeName(i)); m_engine->Error("--Here is what you requested:"); for (SEDataRequest const* dr : m_engine->GetEngineTracker()->GetDataRequestManager().GetDataRequests()) - m_engine->Error("-- " + m_engine->GetEngineTracker()->GetHeader(*dr)); + m_engine->Error("-- " + dr->GetHeaderName()); m_engine->Error("I don't have the logic to figure out which tracked items are duplicated and where they go in the pulled data array"); return false; } diff --git a/src/cpp/cdm/engine/SEDataRequest.cpp b/src/cpp/cdm/engine/SEDataRequest.cpp index eeff72d1..1b1f6733 100644 --- a/src/cpp/cdm/engine/SEDataRequest.cpp +++ b/src/cpp/cdm/engine/SEDataRequest.cpp @@ -6,6 +6,15 @@ #include "cdm/utils/unitconversion/UCCommon.h" #include "cdm/io/protobuf/PBEngine.h" +std::string Space2Underscore(const std::string& str) +{ + std::string s = str; + std::transform(s.begin(), s.end(), s.begin(), [](char ch) { + return ch == ' ' ? '_' : ch; + }); + return s; +} + SEDataRequest::SEDataRequest(const SEDataRequest& dr) { Set(dr); @@ -226,3 +235,129 @@ std::string SEDataRequest::ToString() const str << "\n\tRequested Unit : " << m_RequestedUnit; return str.str(); } + +std::string SEDataRequest::GetHeaderName() const +{ + std::stringstream ss; + if(GetCategory() == eDataRequest_Category::Patient) + ss << "Patient-"; + else if(GetCategory() == eDataRequest_Category::MechanicalVentilator) + ss << "MechanicalVentilator-"; + // TODO We probably should prefix all equipment amb + + switch (GetCategory()) + { + case eDataRequest_Category::Patient: + case eDataRequest_Category::Physiology: + case eDataRequest_Category::Environment: + case eDataRequest_Category::AnesthesiaMachine: + case eDataRequest_Category::ECG: + case eDataRequest_Category::Inhaler: + case eDataRequest_Category::MechanicalVentilator: + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetPropertyName(); + else if(HasUnit()) + ss << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + + return Space2Underscore(ss.str()); + } + case eDataRequest_Category::Action: + { + if (HasCompartmentName() && HasSubstanceName()) + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetActionName() << "-" << GetCompartmentName() << "-" << GetSubstanceName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetActionName() << "-" << GetCompartmentName() << "-" << GetSubstanceName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetActionName() << "-" << GetCompartmentName() << "-" << GetSubstanceName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + } + else if (HasCompartmentName()) + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetActionName() << "-" << GetCompartmentName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetActionName() << "-" << GetCompartmentName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetActionName() << "-" << GetCompartmentName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + } + else if (HasSubstanceName()) + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetActionName() << "-" << GetSubstanceName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetActionName() << "-" << GetSubstanceName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetActionName() << "-" << GetSubstanceName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + } + else + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetActionName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetActionName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetActionName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + } + + return Space2Underscore(ss.str()); + } + case eDataRequest_Category::GasCompartment: + case eDataRequest_Category::LiquidCompartment: + case eDataRequest_Category::ThermalCompartment: + case eDataRequest_Category::TissueCompartment: + { + if (HasSubstanceName()) + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetCompartmentName() << "-" << GetSubstanceName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetCompartmentName() << "-" << GetSubstanceName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetCompartmentName() << "-" << GetSubstanceName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + } + else + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetCompartmentName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetCompartmentName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetCompartmentName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + } + + return Space2Underscore(ss.str()); + } + case eDataRequest_Category::Substance: + { + if (HasCompartmentName()) + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetSubstanceName() << "-" << GetCompartmentName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetSubstanceName() << "-" << GetCompartmentName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetSubstanceName() << "-" << GetCompartmentName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + + return ss.str(); + } + else + { + if (!HasUnit() && !HasRequestedUnit()) + ss << GetSubstanceName() << "-" << GetPropertyName(); + else if(HasUnit()) + ss << GetSubstanceName() << "-" << GetPropertyName() << "(" << *GetUnit() << ")"; + else //Requested unit + ss << GetSubstanceName() << "-" << GetPropertyName() << "(" << GetRequestedUnit() << ")"; + + return Space2Underscore(ss.str()); + } + } + default: + return ""; + } + +} diff --git a/src/cpp/cdm/engine/SEDataRequest.h b/src/cpp/cdm/engine/SEDataRequest.h index bf3f50c6..337e6897 100644 --- a/src/cpp/cdm/engine/SEDataRequest.h +++ b/src/cpp/cdm/engine/SEDataRequest.h @@ -73,7 +73,8 @@ public: virtual bool HasUnit() const; virtual void InvalidateUnit(); - virtual std::string ToString()const; + virtual std::string ToString() const; + virtual std::string GetHeaderName() const; protected: diff --git a/src/cpp/cdm/engine/SEEngineTracker.cpp b/src/cpp/cdm/engine/SEEngineTracker.cpp index 32e28530..72a5715f 100644 --- a/src/cpp/cdm/engine/SEEngineTracker.cpp +++ b/src/cpp/cdm/engine/SEEngineTracker.cpp @@ -62,15 +62,6 @@ #include "cdm/properties/SEScalarElectricPotential.h" #include "cdm/utils/DataTrack.h" -std::string Space2Underscore(const std::string& str) -{ - std::string s = str; - std::transform(s.begin(), s.end(), s.begin(), [](char ch) { - return ch == ' ' ? '_' : ch; - }); - return s; -} - SEEngineTracker::SEEngineTracker(SEPatient& p, SEActionManager& a, SESubstanceManager& s, SECompartmentManager& c, Logger* logger) : Loggable(logger), m_Patient(p), m_ActionMgr(a), m_SubMgr(s), m_CmptMgr(c) { @@ -147,13 +138,6 @@ double SEEngineTracker::GetValue(const SEDataRequest& dr) const return drs->GetValue(*dr.GetUnit()); return drs->GetValue(); } -std::string SEEngineTracker::GetHeader(const SEDataRequest& dr) const -{ - auto drs = GetScalar(dr); - if (drs == nullptr) - return "Not Tracked"; - return drs->Heading; -} const SEDataRequestScalar* SEEngineTracker::GetScalar(const SEDataRequest& dr) const { @@ -284,129 +268,18 @@ bool SEEngineTracker::TrackRequest(SEDataRequest& dr) bool success = ConnectRequest(dr, *ds); - if(dr.GetCategory() == eDataRequest_Category::Patient) - m_ss << "Patient-"; - else if(dr.GetCategory() == eDataRequest_Category::MechanicalVentilator) - m_ss << "MechanicalVentilator-"; - // TODO We probably should prefix all equipment amb - - switch (dr.GetCategory()) + std::string header = dr.GetHeaderName(); + if(header.empty()) { - case eDataRequest_Category::Patient: - case eDataRequest_Category::Physiology: - case eDataRequest_Category::Environment: - case eDataRequest_Category::AnesthesiaMachine: - case eDataRequest_Category::ECG: - case eDataRequest_Category::Inhaler: - case eDataRequest_Category::MechanicalVentilator: - { - if (!dr.GetUnit()) - m_ss << dr.GetPropertyName(); - else - m_ss << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - - ds->Heading = Space2Underscore(m_ss.str()); - m_ss.str("");//Reset Buffer - ds->idx = m_DataTrack->Probe(ds->Heading, 0); - m_DataTrack->SetFormatting(ds->Heading, dr); - return success; - } - case eDataRequest_Category::Action: - { - if (dr.HasCompartmentName() && dr.HasSubstanceName()) - { - if (!dr.GetUnit()) - m_ss << dr.GetActionName() << "-" << dr.GetCompartmentName() << "-" << dr.GetSubstanceName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetActionName() << "-" << dr.GetCompartmentName() << "-" << dr.GetSubstanceName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - } - else if (dr.HasCompartmentName()) - { - if (!dr.GetUnit()) - m_ss << dr.GetActionName() << "-" << dr.GetCompartmentName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetActionName() << "-" << dr.GetCompartmentName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - } - else if (dr.HasSubstanceName()) - { - if (!dr.GetUnit()) - m_ss << dr.GetActionName() << "-" << dr.GetSubstanceName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetActionName() << "-" << dr.GetSubstanceName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - } - else - { - if (!dr.GetUnit()) - m_ss << dr.GetActionName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetActionName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - } - ds->Heading = Space2Underscore(m_ss.str()); - m_ss.str("");//Reset Buffer - ds->idx = m_DataTrack->Probe(ds->Heading, 0); - m_DataTrack->SetFormatting(ds->Heading, dr); - return success; - } - case eDataRequest_Category::GasCompartment: - case eDataRequest_Category::LiquidCompartment: - case eDataRequest_Category::ThermalCompartment: - case eDataRequest_Category::TissueCompartment: - { - if (dr.HasSubstanceName()) - { - if (!dr.GetUnit()) - m_ss << dr.GetCompartmentName() << "-" << dr.GetSubstanceName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetCompartmentName() << "-" << dr.GetSubstanceName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - } - else - { - if (!dr.GetUnit()) - m_ss << dr.GetCompartmentName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetCompartmentName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - } - ds->Heading = Space2Underscore(m_ss.str()); - m_ss.str("");//Reset Buffer - ds->idx = m_DataTrack->Probe(ds->Heading, 0); - m_DataTrack->SetFormatting(ds->Heading, dr); - return success; - } - case eDataRequest_Category::Substance: - { - if (dr.HasCompartmentName()) - { - if (!dr.GetUnit()) - m_ss << dr.GetSubstanceName() << "-" << dr.GetCompartmentName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetSubstanceName() << "-" << dr.GetCompartmentName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - ds->Heading = Space2Underscore(m_ss.str()); - m_ss.str("");//Reset Buffer - ds->idx = m_DataTrack->Probe(ds->Heading, 0); - m_DataTrack->SetFormatting(ds->Heading, dr); - return success; - } - else - { - if (!dr.GetUnit()) - m_ss << dr.GetSubstanceName() << "-" << dr.GetPropertyName(); - else - m_ss << dr.GetSubstanceName() << "-" << dr.GetPropertyName() << "(" << *dr.GetUnit() << ")"; - ds->Heading = Space2Underscore(m_ss.str()); - m_ss.str("");//Reset Buffer - ds->idx = m_DataTrack->Probe(ds->Heading, 0); - m_DataTrack->SetFormatting(ds->Heading, dr); - return success; - } - } - default: - m_ss << "Unhandled data request category: " << eDataRequest_Category_Name(dr.GetCategory()) << std::endl; - Error(m_ss); + m_ss << "Unhandled data request : " << dr.GetPropertyName() << std::endl; + Error(m_ss); + return false; } - m_ss << "Unhandled data request : " << dr.GetPropertyName() << std::endl; - Error(m_ss); - return false; + ds->Heading = header; + ds->idx = m_DataTrack->Probe(ds->Heading, 0); + m_DataTrack->SetFormatting(ds->Heading, dr); + return success; } bool SEEngineTracker::ConnectRequest(SEDataRequest& dr, SEDataRequestScalar& ds) diff --git a/src/cpp/cdm/engine/SEEngineTracker.h b/src/cpp/cdm/engine/SEEngineTracker.h index 86519496..bb2ae8cd 100644 --- a/src/cpp/cdm/engine/SEEngineTracker.h +++ b/src/cpp/cdm/engine/SEEngineTracker.h @@ -95,8 +95,6 @@ public: double GetValue(const SEDataRequest& dr) const; - std::string GetHeader(const SEDataRequest& dr) const; - protected: const SEDataRequestScalar* GetScalar(const SEDataRequest& dr) const; diff --git a/src/cpp/cdm/utils/CSV.cpp b/src/cpp/cdm/utils/CSV.cpp index cac46940..88d4c05f 100644 --- a/src/cpp/cdm/utils/CSV.cpp +++ b/src/cpp/cdm/utils/CSV.cpp @@ -3,10 +3,12 @@ #include "cdm/CommonDefs.h" #include "cdm/utils/CSV.h" +#include "cdm/utils/FileUtils.h" #include "cdm/properties/SEScalar.h" #include #include +#include #include #include @@ -125,3 +127,80 @@ std::string CSV::Record() const { return m_p->record.str(); } + +// ---------------------------------------------------------------------------- +void CSV::SplitCSV(const std::string& originalCSV, const std::map>& fileMapping) +{ + //Determine results directory + auto slash = originalCSV.find_last_of("/"); + std::string dir = "./"; + if(slash != std::string::npos) + { + dir = originalCSV.substr(0,++slash); + } + + //Create result files + std::map outputFiles; + std::map>::const_iterator itr; + for(itr = fileMapping.begin(); itr != fileMapping.end(); ++itr) + { + outputFiles.insert(std::pair(itr->first, std::ofstream(dir + itr->first))); + } + + //Extract each header + std::ifstream origFile(originalCSV); + std::string line, header; + std::getline(origFile, line); + std::stringstream ss(line); + std::vector> headersToFiles; + while(std::getline(ss, header, ',')) + { + headersToFiles.push_back(std::vector()); + + //Determine which files this header belongs to + for(itr = fileMapping.begin(); itr != fileMapping.end(); ++itr) + { + //The first column (time) goes to every file + if(headersToFiles.size() == 1 || std::find(itr->second.begin(), itr->second.end(), header) != itr->second.end()) + { + //Add to headers to files mapping + headersToFiles.back().push_back(itr->first); + + //Print headers + outputFiles[itr->first] << header << ","; + } + } + } + + //Read data, line by line + std::map::iterator outputFileItr; + while(std::getline(origFile, line)) + { + //New line for every file + for(outputFileItr = outputFiles.begin(); outputFileItr != outputFiles.end(); ++outputFileItr) + { + outputFileItr->second << std::endl; + } + + std::stringstream ss(line); + int colIdx = 0; + std::string value; + while(std::getline(ss, value, ',')) + { + //Put this value in the relevant files + for(auto file: headersToFiles[colIdx]) + { + outputFiles[file] << value << ","; + } + + ++colIdx; + } + } + + //Close files + origFile.close(); + for(outputFileItr = outputFiles.begin(); outputFileItr != outputFiles.end(); ++outputFileItr) + { + outputFileItr->second.close(); + } +} diff --git a/src/cpp/cdm/utils/CSV.h b/src/cpp/cdm/utils/CSV.h index 98811479..183c9120 100644 --- a/src/cpp/cdm/utils/CSV.h +++ b/src/cpp/cdm/utils/CSV.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include @@ -27,6 +28,8 @@ public: std::string Record() const; + static void SplitCSV(const std::string& originalCSV, const std::map>& fileMapping); + private: CSV(CSV const&) = delete; diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index 1766f292..8bbc732b 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -3,12 +3,17 @@ #include "PVRunner.h" +#include "PulseEngine.h" #include "engine/PulseConfiguration.h" +#include "engine/PulseScenario.h" #include "cdm/patient/SEPatient.h" #include "cdm/engine/SEEngineTracker.h" #include "cdm/engine/SEDataRequestManager.h" #include "cdm/engine/SEPatientConfiguration.h" +#include "cdm/scenario/SEScenario.h" +#include "cdm/utils/ConfigParser.h" +#include "cdm/utils/CSV.h" #include "cdm/utils/DataTrack.h" #include "cdm/utils/FileUtils.h" #include "cdm/utils/GeneralMath.h" @@ -174,12 +179,42 @@ namespace pulse::study::patient_variability cfg.SetInitialPatientBaselineFilepath(m_RootDir + patient.outputbasefilename() + "/patient.init.json"); pulse->SetConfigurationOverride(&cfg); - // Setup data requests - // TODO Read in all System and the one Patient validation scenarios - // Add in all the data requests from all of those files - // Create 1 big massive CSV file + // Read in all System and Patient validation scenarios + // Add in all the data requests from all of those files pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("HeartRate", FrequencyUnit::Per_min); - pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(m_RootDir + patient.outputbasefilename() + "/patient.csv"); + std::string results = m_RootDir + patient.outputbasefilename() + "/patient.csv"; + pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(results); + std::string scenario_dir; + ConfigSet* config = ConfigParser::FileToConfigSet("run.config"); + if (config->HasKey("scenario_dir")) + { + scenario_dir = config->GetValue("scenario_dir"); + + //Retrieve all patients validation scenarios + std::vector scenario_files; + ListFiles(scenario_dir + "/validation/patients", scenario_files, true, "Validation.json"); + + //Retrieve all systems validation scenarios + ListFiles(scenario_dir + "/validation/systems", scenario_files, true, "Validation.json"); + + //Copy all data requests from each scenario + for(auto scenario_filepath: scenario_files) + { + PulseScenario s(pulse->GetLogger()); + s.SerializeFromFile(scenario_filepath); + + std::string scenario_filename; + SplitFilenamePath(scenario_filepath,scenario_filename); + std::string output_csv_file = Replace(scenario_filename, ".json", "Results.csv"); + m_ScenarioRequests.insert(std::pair>(output_csv_file, std::vector())); + + for(auto dr: s.GetDataRequestManager().GetDataRequests()) + { + SEDataRequest& new_dr = pulse->GetEngineTracker()->GetDataRequestManager().CopyDataRequest(*dr); + m_ScenarioRequests[output_csv_file].push_back(new_dr.GetHeaderName()); + } + } + } // Create our patient SEPatientConfiguration pc; @@ -204,6 +239,9 @@ namespace pulse::study::patient_variability patient.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); pulse->GetLogger()->Info("It took " + cdm::to_string(patient.stabilizationtime_s()) + "s to run this Patient"); + CSV::SplitCSV(results, m_ScenarioRequests); + remove(results.c_str()); + // TODO Run the Java System and Patient validation scripts // This will probably be a new java class that calls existing validation classes // And we will need to provide the patient.json file to it so it can push data to the xlsx diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h index 4ee1838e..efa02f34 100644 --- a/src/cpp/study/patient_variability/PVRunner.h +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -3,6 +3,8 @@ #pragma once #include +#include + #include "PulseEngine.h" PUSH_PROTO_WARNINGS @@ -43,5 +45,6 @@ namespace pulse::study::patient_variability std::vector m_Threads; pulse::study::bind::patient_variability::PatientStateListData* m_PatientList; pulse::study::bind::patient_variability::PatientStateListData* m_PatientResultsList; + std::map> m_ScenarioRequests; }; } \ No newline at end of file -- GitLab From f4af0d05ba298a638fe75ae69cba56d7ae997afb Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Tue, 5 Apr 2022 12:54:41 -0400 Subject: [PATCH 011/115] Add support to validation tool to dynmically push patient data into the spreedsheet to compute patient specific validation values Add support to run validation on a given directory with expected files, along with the V&V test generated fileset --- .eclipse/bind/.project | 5 + .eclipse/pulse/.classpath | 4 + .../validation/PatientValidationData.xlsx | Bin 13854 -> 14057 bytes .../validation/SystemValidationData.xlsx | Bin 93257 -> 95745 bytes .../testing/validation/PatientValidation.java | 2 +- .../testing/validation/ValidationTool.java | 318 ++++++++++++------ src/schema/pulse/cdm/bind/TestReport.proto | 12 + 7 files changed, 237 insertions(+), 104 deletions(-) diff --git a/.eclipse/bind/.project b/.eclipse/bind/.project index 2f840c75..1cb4a6b6 100644 --- a/.eclipse/bind/.project +++ b/.eclipse/bind/.project @@ -15,6 +15,11 @@ org.eclipse.jdt.core.javanature + + PULSE_BIND + 2 + PULSE_BIND + java 2 diff --git a/.eclipse/pulse/.classpath b/.eclipse/pulse/.classpath index 9c8e9427..77a61cbc 100644 --- a/.eclipse/pulse/.classpath +++ b/.eclipse/pulse/.classpath @@ -21,5 +21,9 @@ + + + + diff --git a/data/human/adult/validation/PatientValidationData.xlsx b/data/human/adult/validation/PatientValidationData.xlsx index bb8c1ee5d3788ff3e37cb4df441c6943c855319e..8f4ea762a49f989a4f0c916d882c7f5cba0a0a99 100644 GIT binary patch delta 4898 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 diff --git a/data/human/adult/validation/SystemValidationData.xlsx b/data/human/adult/validation/SystemValidationData.xlsx index e38e79fcc708f6cfa7bdce0bd61ebf7abf44068f..602309302418650b272f7080e45fa1f05fee2246 100644 GIT binary patch delta 65511 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

"+TABLE_TYPE+"Validation


"); // Get a list of all the results files we have to work with - - File vdir = new File("./"+csv_root+"/scenarios/validation/"+VALIDATION_FOLDER+"/"); - String[] vFiles = vdir.list(); + File vdir = new File(csv_root); + String[] vFiles = vdir.list(fileFilter); if(vFiles==null || vFiles.length==0) { - Log.error("No validation files were found, run the validation scenarios please"); + Log.error("No csv files were found, generate those please"); return; } - // Now read in the spreadsheet + // Now read in the spreadsheet FileInputStream xlFile = new FileInputStream(directoryName+"/"+fileName); XSSFWorkbook xlWBook = new XSSFWorkbook (xlFile); @@ -196,6 +224,7 @@ public abstract class ValidationTool Map> tableErrors = new HashMap<>(); List allRows = new ArrayList<>(); Map summary = new TreeMap<>(); + for(int i=0; i(); @@ -231,7 +260,7 @@ public abstract class ValidationTool { try { - SEPatientAssessment ass = SEPatientAssessment.readAssessment("./"+csv_root+"/scenarios/validation/"+VALIDATION_FOLDER+"/"+vFile); + SEPatientAssessment ass = SEPatientAssessment.readAssessment(csv_root+vFile); assessments.put(vFile,ass); } catch(InvalidProtocolBufferException ex) @@ -251,12 +280,17 @@ public abstract class ValidationTool } // Is this patient validation? patient = null; - if(TABLE_TYPE.equals("Patient")) + if(TABLE_TYPE.equals("Patient") || RUN_TYPE == RunType.DATA) { // Patient Name is encoded in the naming convention (or else it needs to be) String patientName = resultsName.substring(resultsName.lastIndexOf("-")+1,resultsName.indexOf("Results")); patient = new SEPatient(); - patient.readFile("./stable/"+patientName+".json"); + // Check to see if we have a patient file in our csv_root dir first + File f = new File(csv_root+"patient.init.json"); + if(f.exists()) + patient.readFile(csv_root+"patient.init.json"); + else + patient.readFile("./stable/"+patientName+".json"); } allRows.clear(); @@ -265,14 +299,13 @@ public abstract class ValidationTool // Read the sheet and process all the validation data rows try { - int rows = xlSheet.getPhysicalNumberOfRows(); for (int r = 0; r < rows; r++) { Row row = xlSheet.getRow(r); if (row == null) continue; - int cells = 11;//row.getPhysicalNumberOfCells(); + int cells = 13;//row.getPhysicalNumberOfCells(); Cell cell = row.getCell(0); if(cell==null) continue; @@ -280,14 +313,63 @@ public abstract class ValidationTool String cellValue = cell.getStringCellValue(); if(cellValue==null||cellValue.isEmpty()) continue;// No property, skip it - //if(cellValue.compareTo("Color")==0) - // System.out.println("Here!"); + // Check to see if this has a patient table + // We can push patient values to for dynamic validation + if(cellValue.equals("Patient Inputs")) + { + for (r++; r < rows; r++) + { + row = xlSheet.getRow(r); + Cell cName = row.getCell(0); + Cell cUnits = row.getCell(1); + Cell cValue = row.getCell(2); + String name = cName.getStringCellValue(); + if(name == null||name.isEmpty()) + break; + if(name.equals("Gender")) + { + if(patient == null) + { + Log.info("Using default gender of "+cValue.getStringCellValue()); + continue;// Just step through these to the end + } + String gender = patient.getSex()==eSex.Male?"Male":"Female"; + cValue.setCellValue(gender); + Log.info("Setting patient gender to "+gender); + continue; + } + if(cValue.getCellType() != CellType.NUMERIC) + { + //evaluator.evaluateFormulaCell(cValue); + Log.info("Using equation for "+name+ ", which computed value of "+cValue.getNumericCellValue()+cUnits.getStringCellValue()); + continue;// Skip equations + } + String units = ""; + if(cUnits != null) + units = cUnits.getStringCellValue(); + if(patient == null) + { + Log.info("Using the default "+name+" of "+cValue.getNumericCellValue()+cUnits.getStringCellValue()); + continue;// Just step through these to the end + } + Method m = SEPatient.class.getMethod("get"+name); + SEScalar s = ((SEScalar)m.invoke(patient)); + if(s.isValid()) + { + double value = s.getValue(units); + Log.info("Setting patient "+name+" to "+value+units); + cValue.setCellValue(value); + } + else + Log.error("Patient does not have a value for "+name+", using default in spreadsheet"); + } + continue; + } if (row.getCell(1) != null) cellValue = row.getCell(1).getStringCellValue(); if(cellValue!=null&&cellValue.equals("Units")) continue;// Header - ValidationRow vRow = new ValidationRow(); allRows.add(vRow); for (int c = 0; c <= cells; c++) @@ -365,9 +447,12 @@ public abstract class ValidationTool } } break; - case 3://D + case 3://D Male Multiplier + break; + case 4://E Femaile Multiplier + case 5://F // Replace any return characters with empty - if(patient!=null && vRow.name.indexOf('*')==-1) + if(patientValidation && vRow.name.indexOf('*')==-1) { try { @@ -396,37 +481,37 @@ public abstract class ValidationTool vRow.refValues = cellValue.replace("\n",""); break; - case 4://E + case 6://G // Replace any return characters with empty if(cellValue!=null) cellValue = cellValue.replace("\n",""); vRow.refCites = cellValue; break; - case 5://F Reference Page (Internal only) + case 7://H Reference Page (Internal only) break; - case 6://G Notes + case 8://I Notes if(cellValue!=null) vRow.notes = cellValue; break;// Skipping for now - case 7://H Internal Notes (Internal only) + case 9://J Internal Notes (Internal only) break; - case 8://I Reading (Internal only) + case 10://K Reading (Internal only) break; - case 9://J Table (Internal only) + case 11://L Table (Internal only) if(cellValue==null) cellValue = ""; vRow.table = cellValue; - if(patient!=null) - vRow.table = patient.getName() +"Patient"+cellValue; + if(patientValidation) + vRow.table = patient.getName()+cellValue; break; - case 10://K ResultFile (Internal only) + case 12://M ResultFile (Internal only) if(cellValue!=null) vRow.resultFile = cellValue; break; - case 11://L Mantissa Digits + case 13://N Mantissa Digits if(cellValue!=null) vRow.doubleFormat = cellValue; - if(patient != null && vRow.dType != DataType.Patient2SystemMean) + if(patientValidation && vRow.dType != DataType.Patient2SystemMean) vRow.refValues = String.format("%."+vRow.doubleFormat, vRow.refValue); break; } @@ -471,38 +556,49 @@ public abstract class ValidationTool if(name.contains("All")) continue; List t = tables.get(name); - AddToSummary(summary, name, t); - WriteHTML(t,name); - WriteDoxyTable(t,name,destinationDirectory); - if(name.equalsIgnoreCase(sheetName)) + if(RUN_TYPE == RunType.DOC) { - List properties = new ArrayList<>(); - for(ValidationRow vRow : t) - properties.add(vRow.name); - for(ValidationRow vRow : tableErrors.get(name)) - properties.add(vRow.name); - CrossCheckValidationWithSchema(properties, tableErrors.get(name), name); + AddToSummary(summary, name, t); + WriteHTML(t,name); + WriteDoxyTable(t,name,destinationDirectory); + if(name.equalsIgnoreCase(sheetName)) + { + List properties = new ArrayList<>(); + for(ValidationRow vRow : t) + properties.add(vRow.name); + for(ValidationRow vRow : tableErrors.get(name)) + properties.add(vRow.name); + CrossCheckValidationWithSchema(properties, tableErrors.get(name), name); + } + WriteHTML(tableErrors.get(name),name+"Errors"); + if(patientValidation) + CustomMarkdown(patient.getName(),destinationDirectory); + } + else + { + if(!t.isEmpty()) + WriteValidationJson(t, csv_root+name+"ValidationResults.json"); } - WriteHTML(tableErrors.get(name),name+"Errors"); - if(patient!=null) - CustomMarkdown(patient.getName(),destinationDirectory); } } } - WriteSummary(summary, destinationDirectory); xlWBook.close(); - WriteHTML(badSheets,fileName+" Errors"); - html.append(""); - html.append(""); - try - { - BufferedWriter out = new BufferedWriter(new FileWriter(".//test_results/"+TABLE_TYPE+"Validation.html")); - out.write(html.toString()); - out.close(); - } - catch(Exception ex) + if(RUN_TYPE == RunType.DOC) { - Log.error("Unable to write "+TABLE_TYPE+" HTML validation report",ex); + WriteSummary(summary, destinationDirectory); + WriteHTML(badSheets,fileName+" Errors"); + html.append(""); + html.append(""); + try + { + BufferedWriter out = new BufferedWriter(new FileWriter("./test_results/"+TABLE_TYPE+"Validation.html")); + out.write(html.toString()); + out.close(); + } + catch(Exception ex) + { + Log.error("Unable to write "+TABLE_TYPE+" HTML validation report",ex); + } } } catch(Exception ex) @@ -510,37 +606,39 @@ public abstract class ValidationTool Log.error("Error processing spreadsheet "+fileName,ex); } // Just for fun, I am going to create a single md file with ALL the tables in it - - try + if(RUN_TYPE == RunType.DOC) { - String line; - File vDir = new File(destinationDirectory); - vDir.mkdir(); - String AllTableName = VALIDATION_FOLDER+"ValidationTables.md"; - PrintWriter writer = new PrintWriter(destinationDirectory+"/"+AllTableName, "UTF-8"); - - for (String fName : vDir.list()) + try { - if(fName.equals(AllTableName)) - continue; - if(new File(fName).isDirectory()) - continue; - FileReader in = new FileReader(destinationDirectory+"/"+fName); - BufferedReader inFile = new BufferedReader(in); - writer.println(fName); - while ((line = inFile.readLine()) != null) - writer.println(line); - inFile.close(); - inFile = null; - writer.println("
"); + String line; + File vDir = new File(destinationDirectory); + vDir.mkdir(); + String AllTableName = VALIDATION_FOLDER+"ValidationTables.md"; + PrintWriter writer = new PrintWriter(destinationDirectory+"/"+AllTableName, "UTF-8"); + + for (String fName : vDir.list()) + { + if(fName.equals(AllTableName)) + continue; + if(new File(fName).isDirectory()) + continue; + FileReader in = new FileReader(destinationDirectory+"/"+fName); + BufferedReader inFile = new BufferedReader(in); + writer.println(fName); + while ((line = inFile.readLine()) != null) + writer.println(line); + inFile.close(); + inFile = null; + writer.println("
"); + } + writer.close(); + writer = null; + System.gc(); + } + catch (Exception ex) + { + Log.error("Unable to create single validation table file.",ex); } - writer.close(); - writer = null; - System.gc(); - } - catch (Exception ex) - { - Log.error("Unable to create single validation table file.",ex); } } @@ -1095,7 +1193,7 @@ public abstract class ValidationTool } vRow.results = getResults(vRow.name,vRow.unit); - if(vRow.results==null && patient !=null) + if(vRow.results==null && patientValidation) vRow.results = getResults("Patient"+vRow.name,vRow.unit);// See if this a patient output if(vRow.results==null)// Nope, I don't think the result is there { @@ -1140,7 +1238,7 @@ public abstract class ValidationTool resultData.put(result,results); break; } - } + } } return results; } @@ -1440,4 +1538,18 @@ public abstract class ValidationTool } html.append(""); } + protected void WriteValidationJson(List vData, String filepath) throws InvalidProtocolBufferException + { + PropertyValidationListData.Builder pvList = PropertyValidationListData.newBuilder(); + for(ValidationRow vRow : vData) + { + PropertyValidationData.Builder pvd = pvList.addPropertyBuilder(); + pvd.setName(vRow.header); + pvd.setExpectedValue(vRow.refValue); + pvd.setComputedValue(vRow.result); + pvd.setError(vRow.resultError); + } + pvList.build(); + FileUtils.writeFile(filepath, JsonFormat.printer().print(pvList)); + } } diff --git a/src/schema/pulse/cdm/bind/TestReport.proto b/src/schema/pulse/cdm/bind/TestReport.proto index 2c0aa252..bf2af446 100644 --- a/src/schema/pulse/cdm/bind/TestReport.proto +++ b/src/schema/pulse/cdm/bind/TestReport.proto @@ -6,6 +6,18 @@ option optimize_for = SPEED; import "pulse/cdm/bind/Properties.proto"; +message PropertyValidationData +{ + string Name = 1; + double ExpectedValue = 2; + double ComputedValue = 3; + double Error = 4; +} +message PropertyValidationListData +{ + repeated PropertyValidationData Property = 1; +} + message TestErrorStatisticsData { -- GitLab From 7de116ddb19b752f5b6b59827733689eec03459f Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Tue, 5 Apr 2022 13:21:13 -0500 Subject: [PATCH 012/115] allow csv file mapping to work with threads --- src/cpp/study/patient_variability/PVRunner.cpp | 7 ++++--- src/cpp/study/patient_variability/PVRunner.h | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index 8bbc732b..f0e6ae8a 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -186,6 +186,7 @@ namespace pulse::study::patient_variability pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(results); std::string scenario_dir; ConfigSet* config = ConfigParser::FileToConfigSet("run.config"); + std::map> scenarioRequests; if (config->HasKey("scenario_dir")) { scenario_dir = config->GetValue("scenario_dir"); @@ -206,12 +207,12 @@ namespace pulse::study::patient_variability std::string scenario_filename; SplitFilenamePath(scenario_filepath,scenario_filename); std::string output_csv_file = Replace(scenario_filename, ".json", "Results.csv"); - m_ScenarioRequests.insert(std::pair>(output_csv_file, std::vector())); + scenarioRequests.insert(std::pair>(output_csv_file, std::vector())); for(auto dr: s.GetDataRequestManager().GetDataRequests()) { SEDataRequest& new_dr = pulse->GetEngineTracker()->GetDataRequestManager().CopyDataRequest(*dr); - m_ScenarioRequests[output_csv_file].push_back(new_dr.GetHeaderName()); + scenarioRequests[output_csv_file].push_back(new_dr.GetHeaderName()); } } } @@ -239,7 +240,7 @@ namespace pulse::study::patient_variability patient.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); pulse->GetLogger()->Info("It took " + cdm::to_string(patient.stabilizationtime_s()) + "s to run this Patient"); - CSV::SplitCSV(results, m_ScenarioRequests); + CSV::SplitCSV(results, scenarioRequests); remove(results.c_str()); // TODO Run the Java System and Patient validation scripts diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h index efa02f34..df142acd 100644 --- a/src/cpp/study/patient_variability/PVRunner.h +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -45,6 +45,5 @@ namespace pulse::study::patient_variability std::vector m_Threads; pulse::study::bind::patient_variability::PatientStateListData* m_PatientList; pulse::study::bind::patient_variability::PatientStateListData* m_PatientResultsList; - std::map> m_ScenarioRequests; }; } \ No newline at end of file -- GitLab From cd862523ec3af0ed47f89755c2e095586f8ccb23 Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Tue, 5 Apr 2022 21:41:06 -0400 Subject: [PATCH 013/115] =?UTF-8?q?=EF=BB=BFClean=20up=20data=20reqest=20l?= =?UTF-8?q?ogic=20Add=20a=20block=20to=20advance=202min=20for=20data=20col?= =?UTF-8?q?lection=20Integrate=20Java=20functionality=20into=20our=20study?= =?UTF-8?q?=20via=20our=20run=20utility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/run.cmake.in | 3 +++ src/cpp/cdm/engine/SEDataRequest.cpp | 4 ++-- src/cpp/cdm/utils/FileUtils.cpp | 4 +++- src/cpp/study/patient_variability/PVRunner.h | 1 - .../pulse/cdm/testing/validation/PatientValidation.java | 6 ++++-- .../pulse/cdm/testing/validation/SystemValidation.java | 5 +++-- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/bin/run.cmake.in b/bin/run.cmake.in index 6fe0d57e..d5ff4329 100644 --- a/bin/run.cmake.in +++ b/bin/run.cmake.in @@ -53,6 +53,9 @@ if(TYPE STREQUAL "tests" OR TYPE STREQUAL "SystemValidation" OR TYPE STREQUAL "P execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${JAVA_CLASSPATH}" com.kitware.pulse.cdm.testing.SETestDriver PatientVerification.config) execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${JAVA_CLASSPATH}" com.kitware.pulse.cdm.testing.validation.PatientValidation TEST) endif() +elseif(TYPE STREQUAL "validateFolder")# ARG1 is folder path, if ARG2 is provided and 'false', java logging is turned off + execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${JAVA_CLASSPATH}" com.kitware.pulse.cdm.testing.validation.PatientValidation ${ARG1} ${ARG2}) + execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${JAVA_CLASSPATH}" com.kitware.pulse.cdm.testing.validation.SystemValidation ${ARG1} ${ARG2}) elseif(TYPE STREQUAL "genData") execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${JAVA_CLASSPATH}" com.kitware.pulse.dataset.DataSetReader) execute_process(COMMAND "${Java_JAVA_EXECUTABLE}" -classpath "${JAVA_CLASSPATH}" com.kitware.pulse.dataset.ValidationDataSetReader) diff --git a/src/cpp/cdm/engine/SEDataRequest.cpp b/src/cpp/cdm/engine/SEDataRequest.cpp index 1b1f6733..8864c30d 100644 --- a/src/cpp/cdm/engine/SEDataRequest.cpp +++ b/src/cpp/cdm/engine/SEDataRequest.cpp @@ -195,7 +195,7 @@ void SEDataRequest::SetRequestedUnit(const std::string& unit) } bool SEDataRequest::HasRequestedUnit() const { - return m_RequestedUnit.empty()?false:true; + return m_RequestedUnit.empty()||m_RequestedUnit=="unitless" ? false : true; } void SEDataRequest::InvalidateRequestedUnit() { @@ -259,7 +259,7 @@ std::string SEDataRequest::GetHeaderName() const ss << GetPropertyName(); else if(HasUnit()) ss << GetPropertyName() << "(" << *GetUnit() << ")"; - else //Requested unit + else // Requested Unit ss << GetPropertyName() << "(" << GetRequestedUnit() << ")"; return Space2Underscore(ss.str()); diff --git a/src/cpp/cdm/utils/FileUtils.cpp b/src/cpp/cdm/utils/FileUtils.cpp index efe8fdca..f38fb59c 100644 --- a/src/cpp/cdm/utils/FileUtils.cpp +++ b/src/cpp/cdm/utils/FileUtils.cpp @@ -164,6 +164,7 @@ void ListFiles(const std::string& dir, std::vector& files, bool rec if (std::filesystem::exists(entry.status()) && std::filesystem::is_regular_file(entry.status())) { filename = entry.path().string(); + std::replace(filename.begin(), filename.end(), '\\', '/'); if (filename.find(mask) != std::string::npos) files.push_back(filename); } @@ -177,6 +178,7 @@ void ListFiles(const std::string& dir, std::vector& files, bool rec if (std::filesystem::exists(entry.status()) && std::filesystem::is_regular_file(entry.status())) { filename = entry.path().string(); + std::replace(filename.begin(), filename.end(), '\\', '/'); if (filename.find(mask) != std::string::npos) files.push_back(filename); } @@ -213,7 +215,7 @@ bool IsJSONFile(const std::string& filename) bool SplitFilenamePath(const std::string& filepath, std::string& filename) { - auto slash = filepath.find_last_of("/"); + auto slash = filepath.find_last_of("\\/"); (slash == std::string::npos) ? slash = 0 : slash++; filename = filepath.substr(slash); diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h index df142acd..edf47c7d 100644 --- a/src/cpp/study/patient_variability/PVRunner.h +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -37,7 +37,6 @@ namespace pulse::study::patient_variability pulse::study::bind::patient_variability::PatientStateData* GetNextPatient(); std::mutex m_mutex; - bool m_Running; std::string m_RootDir; std::string m_PatientResultsListFile; diff --git a/src/java/com/kitware/pulse/cdm/testing/validation/PatientValidation.java b/src/java/com/kitware/pulse/cdm/testing/validation/PatientValidation.java index 1f4d3a0d..848938b6 100644 --- a/src/java/com/kitware/pulse/cdm/testing/validation/PatientValidation.java +++ b/src/java/com/kitware/pulse/cdm/testing/validation/PatientValidation.java @@ -22,14 +22,16 @@ public class PatientValidation extends ValidationTool public static void main(String[] args) { JNIBridge.initialize(); - Log.info("Running with agrs : "+Arrays.toString(args)); PatientValidation me = new PatientValidation(); if(args.length==0) { me.loadData("TEST"); } else - { + { + if(args.length>=2 && args[1].equals("false")) + Log.output2Console = false; + Log.info("Running with agrs : "+Arrays.toString(args)); me.loadData(args[0]); } } diff --git a/src/java/com/kitware/pulse/cdm/testing/validation/SystemValidation.java b/src/java/com/kitware/pulse/cdm/testing/validation/SystemValidation.java index e5b08c28..57ffef98 100644 --- a/src/java/com/kitware/pulse/cdm/testing/validation/SystemValidation.java +++ b/src/java/com/kitware/pulse/cdm/testing/validation/SystemValidation.java @@ -20,7 +20,6 @@ public class SystemValidation extends ValidationTool public static void main(String[] args) { JNIBridge.initialize(); - Log.info("Running with agrs : "+Arrays.toString(args)); SystemValidation me = new SystemValidation(); if(args.length==0) { @@ -28,8 +27,10 @@ public class SystemValidation extends ValidationTool } else { + if(args.length>=2 && args[1].equals("false")) + Log.output2Console = false; + Log.info("Running with agrs : "+Arrays.toString(args)); me.loadData(args[0]); } } - } -- GitLab From 4dc924d21ad19361d282defaafcd7c0b1cdbfe5e Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Tue, 5 Apr 2022 21:49:00 -0400 Subject: [PATCH 014/115] Add a block to advance 2min for data collection Integrate Java functionality into our study via our run utility --- .../study/patient_variability/PVRunner.cpp | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index f0e6ae8a..0f1855fc 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -181,12 +181,13 @@ namespace pulse::study::patient_variability // Read in all System and Patient validation scenarios // Add in all the data requests from all of those files - pulse->GetEngineTracker()->GetDataRequestManager().CreatePhysiologyDataRequest("HeartRate", FrequencyUnit::Per_min); - std::string results = m_RootDir + patient.outputbasefilename() + "/patient.csv"; + std::string results = m_RootDir + patient.outputbasefilename() + "/AllValidationResults.csv"; pulse->GetEngineTracker()->GetDataRequestManager().SetResultsFilename(results); + std::string scenario_dir; + + std::map> allScenarioRequests; ConfigSet* config = ConfigParser::FileToConfigSet("run.config"); - std::map> scenarioRequests; if (config->HasKey("scenario_dir")) { scenario_dir = config->GetValue("scenario_dir"); @@ -207,15 +208,20 @@ namespace pulse::study::patient_variability std::string scenario_filename; SplitFilenamePath(scenario_filepath,scenario_filename); std::string output_csv_file = Replace(scenario_filename, ".json", "Results.csv"); - scenarioRequests.insert(std::pair>(output_csv_file, std::vector())); + allScenarioRequests.insert(std::pair>(output_csv_file, std::vector())); for(auto dr: s.GetDataRequestManager().GetDataRequests()) { SEDataRequest& new_dr = pulse->GetEngineTracker()->GetDataRequestManager().CopyDataRequest(*dr); - scenarioRequests[output_csv_file].push_back(new_dr.GetHeaderName()); + allScenarioRequests[output_csv_file].push_back(new_dr.GetHeaderName()); } } } + else + { + Error("Cannot find scenario root... cannot add any data requests..."); + return false; + } // Create our patient SEPatientConfiguration pc; @@ -238,15 +244,27 @@ namespace pulse::study::patient_variability } patient.set_achievedstabilization(true); patient.set_stabilizationtime_s(profiler.GetElapsedTime_s("Total")); - pulse->GetLogger()->Info("It took " + cdm::to_string(patient.stabilizationtime_s()) + "s to run this Patient"); + pulse->GetLogger()->Info("It took " + cdm::to_string(patient.stabilizationtime_s()) + "s to stabilize this Patient"); + + double dT_s = pulse->GetTimeStep(TimeUnit::s); + int count = static_cast(120 / dT_s); + + pulse->GetEngineTracker()->TrackData(0); + for (int i = 0; i < count; i++) + { + if (!pulse->AdvanceModelTime()) // Compute 1 time step + return false; + // Pull Track will pull data from the engine and append it to the file + pulse->GetEngineTracker()->TrackData(pulse->GetSimulationTime(TimeUnit::s)); + } + pulse->GetEngineTracker()->ResetFile();// So we can close it - CSV::SplitCSV(results, scenarioRequests); - remove(results.c_str()); + CSV::SplitCSV(results, allScenarioRequests); + if (std::remove(results.c_str()) != 0) + Error("Unable to remove file " + results); - // TODO Run the Java System and Patient validation scripts - // This will probably be a new java class that calls existing validation classes - // And we will need to provide the patient.json file to it so it can push data to the xlsx - // That java class should write out a report or something to our patient.outputbasefilename + std::string command = "cmake -DTYPE:STRING=validateFolder -DARG1:STRING="+m_RootDir+patient.outputbasefilename()+" -DARG2:STRING=false -P run.cmake"; + std::system(command.c_str()); // Add our results to our results file m_mutex.lock(); -- GitLab From de8a76998d17a9a82b41e264aa068d29eb1be8f2 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Wed, 6 Apr 2022 10:18:25 -0500 Subject: [PATCH 015/115] actually run more than one patient --- .../study/patient_variability/PVGenerator.cpp | 21 +++++------ .../study/patient_variability/PVRunner.cpp | 2 +- src/cpp/study/patient_variability/main.cpp | 37 ++++++++++++++++++- 3 files changed, 46 insertions(+), 14 deletions(-) diff --git a/src/cpp/study/patient_variability/PVGenerator.cpp b/src/cpp/study/patient_variability/PVGenerator.cpp index 013394a0..5a57e6e4 100644 --- a/src/cpp/study/patient_variability/PVGenerator.cpp +++ b/src/cpp/study/patient_variability/PVGenerator.cpp @@ -31,27 +31,25 @@ namespace pulse::study::patient_variability // Adjust height range based on sex unsigned int heightMin_cm = heightMaleMin_cm; unsigned int heightMax_cm = heightMaleMax_cm; - std::string sex_dir = "male"; + std::string sex_dir = "/male"; if( sex == Female ) { heightMin_cm = heightFemaleMin_cm; heightMax_cm = heightFemaleMax_cm; - sex_dir = "female"; + sex_dir = "/female"; } - std::string sex_path = "/" + sex_dir; - for( unsigned int age_yr = ageMin_yr; age_yr <= ageMax_yr; age_yr += ageStep_yr ) { - std::string age_path = sex_path + "/age_yr" + std::to_string(age_yr); + std::string age_dir = "/age_yr" + std::to_string(age_yr); for( unsigned int height_cm = heightMin_cm; height_cm <= heightMax_cm; height_cm += heightStep_cm ) { - std::string height_path = age_path + "/height_cm" + std::to_string(height_cm); + std::string height_dir = "/height_cm" + std::to_string(height_cm); for( double bmi = bmiMin; bmi <= bmiMax; bmi += bmiStep ) { - std::string bmi_path = height_path + "/bmi" + pulse::cdm::to_string(bmi); + std::string bmi_dir = "/bmi" + pulse::cdm::to_string(bmi); // BMI = kg/m2 // kg = BMI * m2 @@ -62,15 +60,16 @@ namespace pulse::study::patient_variability for( unsigned int hr_bpm = hrMin_bpm; hr_bpm <= hrMax_bpm; hr_bpm += hrStep_bpm ) { - std::string hr_path = bmi_path + "/hr_bpm" + std::to_string(hr_bpm); + std::string hr_dir = "/hr_bpm" + std::to_string(hr_bpm); for( unsigned int map_mmHg = mapMin_mmHg; map_mmHg <= mapMax_mmHg; map_mmHg += mapStep_mmHg ) { - std::string map_path = hr_path + "/map_mmHg" + std::to_string(map_mmHg); + std::string map_dir = "/map_mmHg" + std::to_string(map_mmHg); for( unsigned int pp_mmHg = pulsePressureMin_mmHg; pp_mmHg <= pulsePressureMax_mmHg; pp_mmHg += pulsePressureStep_mmHg ) { - std::string full_dir_path = map_path + "/pp_mmHg" + std::to_string(pp_mmHg); + std::string pp_dir = "/pp_mmHg" + std::to_string(pp_mmHg); + std::string full_dir_path = age_dir + bmi_dir + hr_dir + map_dir + pp_dir + sex_dir + height_dir; // systolic - diastolic = pulse pressure // MAP = (systolic + 2 * diastolic) / 3 @@ -78,7 +77,7 @@ namespace pulse::study::patient_variability double systolic_mmHg = pp_mmHg + diastolic_mmHg; auto patientData = pData.add_patient(); - patientData->set_id(id); + patientData->set_id(id++); patientData->set_sex((pulse::cdm::bind::PatientData_eSex)sex); patientData->set_age_yr(age_yr); patientData->set_height_cm(height_cm); diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index 0f1855fc..c40a038f 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -338,4 +338,4 @@ namespace pulse::study::patient_variability { return PBUtils::SerializeFromFile(filename, dst, GetLogger()); } -} \ No newline at end of file +} diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp index 9c213ff1..3bfd8177 100644 --- a/src/cpp/study/patient_variability/main.cpp +++ b/src/cpp/study/patient_variability/main.cpp @@ -14,7 +14,9 @@ int main(int argc, char* argv[]) std::string mode = ""; // Default is to run the manual else below if (argc <= 1) { - mode = "test"; + //mode = "full"; + mode = "solo"; + //mode = "test"; } else { @@ -62,7 +64,7 @@ int main(int argc, char* argv[]) pvg.GeneratePatientList(patients); } - else if (mode == "test") + else if (mode == "solo") { PVGenerator pvg(&log); pvg.ageMin_yr = 18; @@ -93,6 +95,37 @@ int main(int argc, char* argv[]) pvg.GeneratePatientList(patients); } + else if (mode == "test") + { + PVGenerator pvg(&log); + pvg.ageMin_yr = 18; + pvg.ageMax_yr = 65; + pvg.ageStep_yr = 25; + + pvg.heightMaleMin_cm = 165; + pvg.heightMaleMax_cm = 186; + pvg.heightFemaleMin_cm = 153; + pvg.heightFemaleMax_cm = 170; + pvg.heightStep_cm = 8; + + pvg.bmiMin = 18.5; + pvg.bmiMax = 29; + pvg.bmiStep = 10; + + pvg.hrMin_bpm = 60; + pvg.hrMax_bpm = 100; + pvg.hrStep_bpm = 30; + + pvg.mapMin_mmHg = 70; + pvg.mapMax_mmHg = 100; + pvg.mapStep_mmHg = 40; + + pvg.pulsePressureMin_mmHg = 30; + pvg.pulsePressureMax_mmHg = 50; + pvg.pulsePressureStep_mmHg = 40; + + pvg.GeneratePatientList(patients); + } PVRunner pvr(&log); return !pvr.Run(patients, rootDir); -- GitLab From b2855d16f714063328c13572221f17284720490a Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Wed, 6 Apr 2022 12:41:55 -0400 Subject: [PATCH 016/115] Convert int to string properly --- src/cpp/study/patient_variability/PVRunner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index c40a038f..5f8414a8 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -226,7 +226,7 @@ namespace pulse::study::patient_variability // Create our patient SEPatientConfiguration pc; SEPatient& p = pc.GetPatient(); - p.SetName("Patient"+patient.id()); + p.SetName("Patient"+std::to_string(patient.id())); p.SetSex((ePatient_Sex)patient.sex()); p.GetAge().SetValue(patient.age_yr(), TimeUnit::yr); p.GetHeight().SetValue(patient.height_cm(), LengthUnit::cm); -- GitLab From 4fbfceeac429847d033e2e8c1a488dce015906ad Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Thu, 7 Apr 2022 09:03:31 -0500 Subject: [PATCH 017/115] untiless vs Unitless --- data/human/adult/scenarios/miscellaneous/TBIandDrugs.json | 4 ++-- data/human/adult/scenarios/patient/BrainInjury.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/human/adult/scenarios/miscellaneous/TBIandDrugs.json b/data/human/adult/scenarios/miscellaneous/TBIandDrugs.json index 10ea8339..33d1ebc0 100644 --- a/data/human/adult/scenarios/miscellaneous/TBIandDrugs.json +++ b/data/human/adult/scenarios/miscellaneous/TBIandDrugs.json @@ -403,7 +403,7 @@ "CompartmentName": "BrainVasculature", "SubstanceName": "Oxygen", "PropertyName": "Saturation", - "Unit": "Unitless" + "Unit": "unitless" }, { "DecimalFormat": { "Precision": 2 @@ -421,7 +421,7 @@ "CompartmentName": "BrainVasculature", "SubstanceName": "CarbonDioxide", "PropertyName": "Saturation", - "Unit": "Unitless" + "Unit": "unitless" }, { "DecimalFormat": { "Precision": 3 diff --git a/data/human/adult/scenarios/patient/BrainInjury.json b/data/human/adult/scenarios/patient/BrainInjury.json index 64d6c286..54d2c6c0 100644 --- a/data/human/adult/scenarios/patient/BrainInjury.json +++ b/data/human/adult/scenarios/patient/BrainInjury.json @@ -403,7 +403,7 @@ "CompartmentName": "BrainVasculature", "SubstanceName": "Oxygen", "PropertyName": "Saturation", - "Unit": "Unitless" + "Unit": "unitless" }, { "DecimalFormat": { "Precision": 2 @@ -421,7 +421,7 @@ "CompartmentName": "BrainVasculature", "SubstanceName": "CarbonDioxide", "PropertyName": "Saturation", - "Unit": "Unitless" + "Unit": "unitless" }, { "DecimalFormat": { "Precision": 3 -- GitLab From 6178f263d7b77bf4c472f20fe4ad63db273fe2cf Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Tue, 12 Apr 2022 16:03:19 -0500 Subject: [PATCH 018/115] serialize all patient validation results into one file --- .../patient/HemorrhageClass1Femoral.json | 2 +- .../study/patient_variability/PVRunner.cpp | 35 +++++++++++++++---- src/cpp/study/patient_variability/PVRunner.h | 4 +-- src/cpp/study/patient_variability/main.cpp | 13 +++++-- .../pulse/study/bind/PatientVariability.proto | 27 +++++++------- 5 files changed, 57 insertions(+), 24 deletions(-) diff --git a/data/human/adult/scenarios/patient/HemorrhageClass1Femoral.json b/data/human/adult/scenarios/patient/HemorrhageClass1Femoral.json index 03086bc2..86ef6c01 100644 --- a/data/human/adult/scenarios/patient/HemorrhageClass1Femoral.json +++ b/data/human/adult/scenarios/patient/HemorrhageClass1Femoral.json @@ -25,7 +25,7 @@ { "DecimalFormat": { "Precision": 4 }, "Category": "LiquidCompartment", "CompartmentName": "MyocardiumVasculature", "PropertyName": "InFlow", "Unit": "mL/min" }, { "DecimalFormat": { "Precision": 4 }, "Category": "LiquidCompartment", "CompartmentName": "BrainVasculature", "PropertyName": "InFlow", "Unit": "mL/min" }, { "DecimalFormat": { "Precision": 4 }, "Category": "LiquidCompartment", "CompartmentName": "VenaCava", "PropertyName": "InFlow", "Unit": "mL/min" }, - { "DecimalFormat": { "Precision": 4 }, "Category": "LiquidCompartment", "CompartmentName": "RightHeartVasculature", "PropertyName": "InFlow", "Unit": "mL/min" }, + { "DecimalFormat": { "Precision": 4 }, "Category": "LiquidCompartment", "CompartmentName": "RightHeart", "PropertyName": "InFlow", "Unit": "mL/min" }, { "DecimalFormat": { "Precision": 3 }, "Category": "Physiology", "PropertyName": "SystemicVascularResistance", "Unit": "mmHg s/mL"}, { "DecimalFormat": { "Precision": 3 }, "Category": "Physiology", "PropertyName": "TotalHemorrhageRate", "Unit": "mL/s"}, diff --git a/src/cpp/study/patient_variability/PVRunner.cpp b/src/cpp/study/patient_variability/PVRunner.cpp index 5f8414a8..db048ac7 100644 --- a/src/cpp/study/patient_variability/PVRunner.cpp +++ b/src/cpp/study/patient_variability/PVRunner.cpp @@ -38,10 +38,13 @@ namespace pulse::study::patient_variability SAFE_DELETE(m_PatientResultsList); } - bool PVRunner::Run(pulse::study::bind::patient_variability::PatientStateListData& simList, const std::string& rootDir) + bool PVRunner::Run(pulse::study::bind::patient_variability::PatientStateListData& simList, const std::string& rootDir, bool binaryResultsFile) { m_RootDir = rootDir; - m_PatientResultsListFile = rootDir + "/patient_results.json"; + if(!binaryResultsFile) + m_PatientResultsListFile = rootDir + "/patient_results.json"; + else + m_PatientResultsListFile = rootDir + "/patient_results.pbb"; SAFE_DELETE(m_PatientList); SAFE_DELETE(m_PatientResultsList); m_PatientList = &simList; @@ -59,7 +62,7 @@ namespace pulse::study::patient_variability return b; } - bool PVRunner::Run(const std::string& filename, const std::string& rootDir) + bool PVRunner::Run(const std::string& filename, const std::string& rootDir, bool binaryResultsFile) { m_RootDir = rootDir; SAFE_DELETE(m_PatientList); @@ -70,7 +73,10 @@ namespace pulse::study::patient_variability if (!SerializeFromFile(filename, *m_PatientList)) return false; // Let's try to read in a results file - m_PatientResultsListFile = rootDir + "/patient_results.json"; + if(!binaryResultsFile) + m_PatientResultsListFile = rootDir + "/patient_results.json"; + else + m_PatientResultsListFile = rootDir + "/patient_results.pbb"; if (FileExists(m_PatientResultsListFile)) { if (!SerializeFromFile(m_PatientResultsListFile, *m_PatientResultsList)) @@ -103,7 +109,7 @@ namespace pulse::study::patient_variability Info("All Patients are run in the results file"); return true; } - size_t processor_count = 1;// std::thread::hardware_concurrency(); + size_t processor_count = 1;//std::thread::hardware_concurrency(); if (processor_count == 0) { Fatal("Unable to detect number of processors"); @@ -173,7 +179,7 @@ namespace pulse::study::patient_variability pulse->GetLogger()->LogToConsole(false); // But, do write a log file pulse->GetLogger()->SetLogFile(m_RootDir + patient.outputbasefilename() + "/patient.log"); - // Write out the computed patient basline values so we can see how well we met them + // Write out the computed patient baseline values so we can see how well we met them PulseConfiguration cfg; cfg.EnableWritePatientBaselineFile(eSwitch::On); cfg.SetInitialPatientBaselineFilepath(m_RootDir + patient.outputbasefilename() + "/patient.init.json"); @@ -266,6 +272,23 @@ namespace pulse::study::patient_variability std::string command = "cmake -DTYPE:STRING=validateFolder -DARG1:STRING="+m_RootDir+patient.outputbasefilename()+" -DARG2:STRING=false -P run.cmake"; std::system(command.c_str()); + //Retrieve all validation json files for patient and serialize data from those files + std::vector validation_files; + ListFiles(m_RootDir + patient.outputbasefilename(), validation_files, true, "ValidationResults.json"); + const auto& vMap = patient.mutable_validationmap(); + for(auto validation_filepath: validation_files) + { + std::string validation_filename; + SplitFilenamePath(validation_filepath, validation_filename); + + //Serialize the file contents + pulse::cdm::bind::PropertyValidationListData vList; + if(!PBUtils::SerializeFromFile(validation_filepath, vList, pulse->GetLogger())) + return false; + + (*vMap)[validation_filename] = vList; + } + // Add our results to our results file m_mutex.lock(); auto pResult = m_PatientResultsList->add_patient(); diff --git a/src/cpp/study/patient_variability/PVRunner.h b/src/cpp/study/patient_variability/PVRunner.h index edf47c7d..05079b72 100644 --- a/src/cpp/study/patient_variability/PVRunner.h +++ b/src/cpp/study/patient_variability/PVRunner.h @@ -22,8 +22,8 @@ namespace pulse::study::patient_variability PVRunner(Logger* logger=nullptr); virtual ~PVRunner(); - bool Run(const std::string& filename, const std::string& rootDir); - bool Run(pulse::study::bind::patient_variability::PatientStateListData& patients, const std::string& rootDir); + bool Run(const std::string& filename, const std::string& rootDir, bool binaryResultsFile = false); + bool Run(pulse::study::bind::patient_variability::PatientStateListData& patients, const std::string& rootDir, bool binaryResultsFile = false); protected: bool Run(); diff --git a/src/cpp/study/patient_variability/main.cpp b/src/cpp/study/patient_variability/main.cpp index 3bfd8177..c5a0c2f1 100644 --- a/src/cpp/study/patient_variability/main.cpp +++ b/src/cpp/study/patient_variability/main.cpp @@ -11,7 +11,8 @@ using namespace pulse::study::patient_variability; int main(int argc, char* argv[]) { bool clear = true; - std::string mode = ""; // Default is to run the manual else below + bool binary = false; + std::string mode = ""; if (argc <= 1) { //mode = "full"; @@ -22,6 +23,14 @@ int main(int argc, char* argv[]) { mode = argv[1]; } + + if( argc > 1) + { + if(!strcmp(argv[2], "-b") || !strcmp(argv[2], "--binary")) + { + binary = true; + } + } std::string rootDir = "./test_results/patient_variability/"; if(clear) @@ -128,5 +137,5 @@ int main(int argc, char* argv[]) } PVRunner pvr(&log); - return !pvr.Run(patients, rootDir); + return !pvr.Run(patients, rootDir, binary); } \ No newline at end of file diff --git a/src/schema/pulse/study/bind/PatientVariability.proto b/src/schema/pulse/study/bind/PatientVariability.proto index dd7cf0c0..a26451ab 100644 --- a/src/schema/pulse/study/bind/PatientVariability.proto +++ b/src/schema/pulse/study/bind/PatientVariability.proto @@ -5,24 +5,25 @@ option csharp_namespace = "pulse.study.bind.patient_variability"; option optimize_for = SPEED; import "pulse/cdm/bind/Patient.proto"; +import "pulse/cdm/bind/TestReport.proto"; message PatientStateData { - - uint32 ID = 1; - string OutputBaseFilename = 2; + uint32 ID = 1; + string OutputBaseFilename = 2; // Initial Conditions - pulse.cdm.bind.PatientData.eSex Sex = 3; - uint32 Age_yr = 4; - double Height_cm = 5; - double Weight_kg = 6; - double BMI = 7; - double HeartRate_bpm = 8; - double DiastolicArterialPressure_mmHg = 9; - double SystolicArterialPressure_mmHg = 10; + pulse.cdm.bind.PatientData.eSex Sex = 3; + uint32 Age_yr = 4; + double Height_cm = 5; + double Weight_kg = 6; + double BMI = 7; + double HeartRate_bpm = 8; + double DiastolicArterialPressure_mmHg = 9; + double SystolicArterialPressure_mmHg = 10; // Results - bool AchievedStabilization = 11; - double StabilizationTime_s = 12; + bool AchievedStabilization = 11; + double StabilizationTime_s = 12; + map ValidationMap = 13; } message PatientStateListData -- GitLab From 4bc9e0dcd0b52fe9937dfc9955e6046bd5b5c031 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Wed, 13 Apr 2022 13:05:25 -0500 Subject: [PATCH 019/115] Load data with python for analysis --- .../study/patient_variability/analysis.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/python/pulse/study/patient_variability/analysis.py diff --git a/src/python/pulse/study/patient_variability/analysis.py b/src/python/pulse/study/patient_variability/analysis.py new file mode 100644 index 00000000..0ec998ec --- /dev/null +++ b/src/python/pulse/study/patient_variability/analysis.py @@ -0,0 +1,18 @@ +from pulse.study.bind.PatientVariability_pb2 import * +from google.protobuf import json_format + +from os.path import exists + +if __name__ == '__main__': + # Load up result set + results = PatientStateListData() + results_file = "./test_results/patient_variability/patient_results.json" + if not exists(results_file): + results_file = "./test_results/patient_variability/patient_results.pbb" + with open(results_file, "rb") as f: + binary = f.read() + results.ParseFromString(binary) + else: + with open(results_file) as f: + json = f.read() + json_format.Parse(json, results) -- GitLab From 284102c7b510bd56e7e0be8895d80d172324aab9 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Wed, 13 Apr 2022 13:36:24 -0500 Subject: [PATCH 020/115] clean up fe/male logic --- src/cpp/study/patient_variability/PVGenerator.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cpp/study/patient_variability/PVGenerator.cpp b/src/cpp/study/patient_variability/PVGenerator.cpp index 5a57e6e4..c66e9aa4 100644 --- a/src/cpp/study/patient_variability/PVGenerator.cpp +++ b/src/cpp/study/patient_variability/PVGenerator.cpp @@ -24,15 +24,16 @@ namespace pulse::study::patient_variability { int id = 0; - enum Sex { Male=0, Female=1 }; - - for( int sex = Male; sex <= Female; ++sex ) + ePatient_Sex sex_arr[2] = {ePatient_Sex::Male, ePatient_Sex::Female}; + for( int s = 0; s < 2; ++s ) { + ePatient_Sex sex = sex_arr[s]; + // Adjust height range based on sex unsigned int heightMin_cm = heightMaleMin_cm; unsigned int heightMax_cm = heightMaleMax_cm; std::string sex_dir = "/male"; - if( sex == Female ) + if( sex == ePatient_Sex::Female ) { heightMin_cm = heightFemaleMin_cm; heightMax_cm = heightFemaleMax_cm; -- GitLab From 18ddd5fbf5b4278c8e64c2c6c136e41152acc3d4 Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Mon, 18 Apr 2022 09:08:26 -0400 Subject: [PATCH 021/115] Rebase from data request correction --- .../scenarios/patient/HemorrhageClass1Femoral.zip.sha512 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/human/adult/baselines/scenarios/patient/HemorrhageClass1Femoral.zip.sha512 b/data/human/adult/baselines/scenarios/patient/HemorrhageClass1Femoral.zip.sha512 index 40dc58f9..62585c5a 100644 --- a/data/human/adult/baselines/scenarios/patient/HemorrhageClass1Femoral.zip.sha512 +++ b/data/human/adult/baselines/scenarios/patient/HemorrhageClass1Femoral.zip.sha512 @@ -1 +1 @@ -8af167dff481320788cfc0518143a96a8ba920aae6d54567becae54fdf2609334869e98ef7dae1cc7287c23f3504a5b3ed39ca7604e9e637affb05cf5866f0f2 \ No newline at end of file +772a4a15af2a0670fc5a046f1f3961f9ba360d68b034bc56267e15685476288091c90b2a4905eb39d13593bd3903bb6e061b9cdb9c6a27791fe575757b87e49a \ No newline at end of file -- GitLab From e94d847aacf9296e15c6a36730ff9c9752b606b9 Mon Sep 17 00:00:00 2001 From: Aaron Bray Date: Mon, 25 Apr 2022 19:51:49 -0400 Subject: [PATCH 022/115] Add hyphen to match csv column titles for patient data requests --- .../kitware/pulse/cdm/testing/validation/ValidationTool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java b/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java index 6fddca95..9319f0d0 100644 --- a/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java +++ b/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java @@ -1194,7 +1194,7 @@ public abstract class ValidationTool vRow.results = getResults(vRow.name,vRow.unit); if(vRow.results==null && patientValidation) - vRow.results = getResults("Patient"+vRow.name,vRow.unit);// See if this a patient output + vRow.results = getResults("Patient-"+vRow.name,vRow.unit);// See if this a patient output if(vRow.results==null)// Nope, I don't think the result is there { vRow.error = danger+"Not In Results!"+endSpan; -- GitLab From 9171c2cf8eeeba7f57e408c4acb1f4c75561f8ca Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Tue, 26 Apr 2022 11:37:07 -0400 Subject: [PATCH 023/115] back patient validation analysis --- .../study/patient_variability/analysis.py | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/src/python/pulse/study/patient_variability/analysis.py b/src/python/pulse/study/patient_variability/analysis.py index 0ec998ec..1ab82aa2 100644 --- a/src/python/pulse/study/patient_variability/analysis.py +++ b/src/python/pulse/study/patient_variability/analysis.py @@ -1,8 +1,76 @@ from pulse.study.bind.PatientVariability_pb2 import * +from pulse.cdm.bind.TestReport_pb2 import PropertyValidationListData, PropertyValidationData from google.protobuf import json_format +from enum import Enum +from typing import NamedTuple from os.path import exists +class ResultType(Enum): + PASS = 0 + FAIL = 1 + MARGINAL = 2 + +class PatientValidationAnalysis(NamedTuple): + byPatient: dict + byProperty: dict + stabilizationFailures: list + +class SystemsAnalysis(NamedTuple): + pass + + +def systemsValidation(patients, passThreshold = 10, failThreshold = 30 ): + byPatient = {} + byProperty = {} + for patient in patients: + # Only look at stabilized patients + if not patient.AchievedStabilization: + continue + + # Loop through all systems results + for file in patient.ValidationMap: + if file == "Patient" + str(patient.ID) + "ValidationResults.json": + continue + + +def patientValidation(patients, passThreshold = 10, failThreshold = 30): + stabilizationFailures = [] + byPatient = {} + byProperty = {} + for patient in patients: + # Did the patient fail to stabilize + if not patient.AchievedStabilization: + stabilizationFailure.append(patient.ID) + + # Get patient validation results for this patient + propertyList = patient.ValidationMap["Patient" + str(patient.ID) + "ValidationResults.json"] + + # Determine pass/fail for each property + byPatient[patient.ID] = {ResultType.PASS: 0, ResultType.FAIL: 0, ResultType.MARGINAL: 0} + for p in propertyList.Property: + propertyName = p.Name + error = p.Error + if propertyName not in byProperty: + byProperty[propertyName] = {ResultType.PASS: 0, ResultType.FAIL: 0, ResultType.MARGINAL: 0} + + # TODO: Only report change from standard patients instead of totals + if abs(error) < passThreshold: + byPatient[patient.ID][ResultType.PASS] += 1 + byProperty[propertyName][ResultType.PASS] += 1 + elif abs(error) < failThreshold: + byPatient[patient.ID][ResultType.MARGINAL] += 1 + byProperty[propertyName][ResultType.MARGINAL] += 1 + else: + byPatient[patient.ID][ResultType.FAIL] += 1 + byProperty[propertyName][ResultType.FAIL] += 1 + + return PatientValidationAnalysis(byPatient, byProperty, stabilizationFailures) + +def parseResults(patients): + patientValidation(patients, 10, 30) + + if __name__ == '__main__': # Load up result set results = PatientStateListData() @@ -16,3 +84,7 @@ if __name__ == '__main__': with open(results_file) as f: json = f.read() json_format.Parse(json, results) + + patientAnalysis = patientValidation(results.Patient) + print(patientAnalysis.byPatient) + print(patientAnalysis.byProperty) -- GitLab From 11629a1cba8775514cd28b6c9e33d49fe7f3836f Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Wed, 27 Apr 2022 15:35:33 -0400 Subject: [PATCH 024/115] Added ability for system validation to evaluate any patient --- data/config/SystemVerification.config | 12 +- .../validation/SystemValidationData.xlsx | Bin 95745 -> 169249 bytes .../SetupCircuitsAndCompartments.cpp | 2 +- .../testing/validation/ValidationTool.java | 170 +++++++++++------- 4 files changed, 108 insertions(+), 76 deletions(-) diff --git a/data/config/SystemVerification.config b/data/config/SystemVerification.config index 155158ec..a7308db6 100644 --- a/data/config/SystemVerification.config +++ b/data/config/SystemVerification.config @@ -8,7 +8,7 @@ PlotResults=true PercentDifference=2.0 Threads=-1 -#Patients=all +Patients=StandardMale.json,StandardFemale.json # These are used for testing and utilizing serialization # Replace patient file with it's associated patient state, if scenario has no conditions @@ -33,8 +33,8 @@ validation/systems/RespiratoryValidation.json = ScenarioTest validation/systems/TissueValidation.json = ScenarioTest # Assessments -validation/systems/BloodChemistryValidationABG@120s.json = Assessment Computed=./test_results/scenarios -validation/systems/BloodChemistryValidationCBC@120s.json = Assessment Computed=./test_results/scenarios -validation/systems/BloodChemistryValidationCMP@120s.json = Assessment Computed=./test_results/scenarios -validation/systems/RenalValidationUrinalysis@120s.json = Assessment Computed=./test_results/scenarios -validation/systems/RespiratoryValidationPFT@120s.json = Assessment Computed=./test_results/scenarios +#validation/systems/BloodChemistryValidationABG@120s.json = Assessment Computed=./test_results/scenarios +#validation/systems/BloodChemistryValidationCBC@120s.json = Assessment Computed=./test_results/scenarios +#validation/systems/BloodChemistryValidationCMP@120s.json = Assessment Computed=./test_results/scenarios +#validation/systems/RenalValidationUrinalysis@120s.json = Assessment Computed=./test_results/scenarios +#validation/systems/RespiratoryValidationPFT@120s.json = Assessment Computed=./test_results/scenarios diff --git a/data/human/adult/validation/SystemValidationData.xlsx b/data/human/adult/validation/SystemValidationData.xlsx index 602309302418650b272f7080e45fa1f05fee2246..a05e6dd4c7863ae0320742ed2334a5eff707060e 100644 GIT binary patch literal 169249 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
xlxK^L8 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
5M7d3`*x8NVURVjtRVP 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 c-parQEG#+rrjrim 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 DB4%Ba diff --git a/src/cpp/engine/common/controller/SetupCircuitsAndCompartments.cpp b/src/cpp/engine/common/controller/SetupCircuitsAndCompartments.cpp index b86108ed..b90ab097 100644 --- a/src/cpp/engine/common/controller/SetupCircuitsAndCompartments.cpp +++ b/src/cpp/engine/common/controller/SetupCircuitsAndCompartments.cpp @@ -271,7 +271,7 @@ namespace pulse double systolicPressureTarget_mmHg = m_InitialPatient->GetSystolicArterialPressureBaseline(PressureUnit::mmHg); double heartRate_bpm = m_InitialPatient->GetHeartRateBaseline(FrequencyUnit::Per_min); - const double strokeVolumeTarget_mL = 81.0; + const double strokeVolumeTarget_mL = male ? 78.0 : 68.0; double cardiacOutputTarget_mL_Per_s = heartRate_bpm / 60.0 * strokeVolumeTarget_mL; Info("Targeting Cardiac Output of "+pulse::cdm::to_string(cardiacOutputTarget_mL_Per_s)+" mL/s"); const double pulmonaryShuntFractionFactor = 0.009; // Used to set the pulmonary shunt fraction. Actual shunt will be roughly double this value (two lungs). diff --git a/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java b/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java index 9319f0d0..1c525e3d 100644 --- a/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java +++ b/src/java/com/kitware/pulse/cdm/testing/validation/ValidationTool.java @@ -10,6 +10,7 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.FilenameFilter; import java.io.PrintWriter; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; @@ -133,6 +134,99 @@ public abstract class ValidationTool public static final int successTolerance = 10; public static final int warningTolerance = 30; } + + public void populatePatientTab(XSSFWorkbook xlWBook, FormulaEvaluator evaluator, String resultsName, String csv_root) throws InvalidProtocolBufferException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException + { + XSSFSheet xlSheet = xlWBook.getSheetAt(0); + evaluator.clearAllCachedResultValues(); + + // Is this patient validation? + patient = null; + if(TABLE_TYPE.equals("Patient") || RUN_TYPE == RunType.DATA || resultsName.contains("-")) + { + // Patient Name is encoded in the naming convention (or else it needs to be) + String patientName = resultsName.substring(resultsName.lastIndexOf("-")+1,resultsName.indexOf("Results")); + patient = new SEPatient(); + // Check to see if we have a patient file in our csv_root dir first + File f = new File(csv_root+"patient.init.json"); + if(f.exists()) + patient.readFile(csv_root+"patient.init.json"); + else + patient.readFile("./stable/"+patientName+".json"); + } + else + { + return; + } + + int rows = xlSheet.getPhysicalNumberOfRows(); + for (int r = 0; r < rows; r++) + { + Row row = xlSheet.getRow(r); + if (row == null) + continue; + Cell cell = row.getCell(0); + if(cell==null) + continue; + // Check to see if this row is a header + String cellValue = cell.getStringCellValue(); + if(cellValue==null||cellValue.isEmpty()) + continue;// No property, skip it + + // Check to see if this has a patient table + // We can push patient values to for dynamic validation + if(cellValue.equals("Patient Inputs")) + { + for (r++; r < rows; r++) + { + row = xlSheet.getRow(r); + Cell cName = row.getCell(0); + Cell cUnits = row.getCell(1); + Cell cValue = row.getCell(2); + String name = cName.getStringCellValue(); + if(name == null||name.isEmpty()) + break; + if(name.equals("Gender")) + { + if(patient == null) + { + Log.info("Using default gender of "+cValue.getStringCellValue()); + continue;// Just step through these to the end + } + String gender = patient.getSex()==eSex.Male?"Male":"Female"; + cValue.setCellValue(gender); + Log.info("Setting patient gender to "+gender); + continue; + } + if(cValue.getCellType() != CellType.NUMERIC) + { + evaluator.evaluateFormulaCell(cValue); + Log.info("Using equation for "+name+ ", which computed value of "+cValue.getNumericCellValue()+cUnits.getStringCellValue()); + continue;// Skip equations + } + String units = ""; + if(cUnits != null) + units = cUnits.getStringCellValue(); + if(patient == null) + { + Log.info("Using the default "+name+" of "+cValue.getNumericCellValue()+cUnits.getStringCellValue()); + continue;// Just step through these to the end + } + Method m = SEPatient.class.getMethod("get"+name); + SEScalar s = ((SEScalar)m.invoke(patient)); + if(s.isValid()) + { + double value = s.getValue(units); + Log.info("Setting patient "+name+" to "+value+units); + cValue.setCellValue(value); + } + else + Log.error("Patient does not have a value for "+name+", using default in spreadsheet"); + } + continue; + } + } + } public void loadData(String csv_root) { @@ -225,7 +319,7 @@ public abstract class ValidationTool List allRows = new ArrayList<>(); Map summary = new TreeMap<>(); - for(int i=0; i()); if(!tableErrors.containsKey(vRow.table)) -- GitLab From 34d81619e3d7dcffc1fc314437b7f779c9b79511 Mon Sep 17 00:00:00 2001 From: Emily Veenhuis Date: Wed, 27 Apr 2022 15:46:53 -0400 Subject: [PATCH 025/115] rebaseline --- .../systems/BloodChemistryValidation-StandardFemale.zip.sha512 | 1 + .../systems/BloodChemistryValidation-StandardMale.zip.sha512 | 1 + .../systems/CardiovascularValidation-StandardFemale.zip.sha512 | 1 + .../systems/CardiovascularValidation-StandardMale.zip.sha512 | 1 + .../systems/EndocrineValidation-StandardFemale.zip.sha512 | 1 + .../systems/EndocrineValidation-StandardMale.zip.sha512 | 1 + .../systems/EnergyValidation-StandardFemale.zip.sha512 | 1 + .../validation/systems/EnergyValidation-StandardMale.zip.sha512 | 1 + .../systems/GastrointestinalValidation-StandardFemale.zip.sha512 | 1 + .../systems/GastrointestinalValidation-StandardMale.zip.sha512 | 1 + .../systems/NervousValidation-StandardFemale.zip.sha512 | 1 + .../validation/systems/NervousValidation-StandardMale.zip.sha512 | 1 + .../validation/systems/RenalValidation-StandardFemale.zip.sha512 | 1 + .../validation/systems/RenalValidation-StandardMale.zip.sha512 | 1 + .../systems/RespiratoryValidation-StandardFemale.zip.sha512 | 1 + .../systems/RespiratoryValidation-StandardMale.zip.sha512 | 1 + .../systems/TissueValidation-StandardFemale.zip.sha512 | 1 + .../validation/systems/TissueValidation-StandardMale.zip.sha512 | 1 + 18 files changed, 18 insertions(+) create mode 100644 data/human/adult/baselines/scenarios/validation/systems/BloodChemistryValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/BloodChemistryValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/CardiovascularValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/CardiovascularValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/EndocrineValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/EndocrineValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/EnergyValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/EnergyValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/GastrointestinalValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/GastrointestinalValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/NervousValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/NervousValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/RenalValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/RenalValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/RespiratoryValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/RespiratoryValidation-StandardMale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/TissueValidation-StandardFemale.zip.sha512 create mode 100644 data/human/adult/baselines/scenarios/validation/systems/TissueValidation-StandardMale.zip.sha512 diff --git a/data/human/adult/baselines/scenarios/validation/systems/BloodChemistryValidation-StandardFemale.zip.sha512 b/data/human/adult/baselines/scenarios/validation/systems/BloodChemi

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 delta 62948 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 resultData = new HashMap<>(); protected Map assessments; @@ -129,33 +136,62 @@ public abstract class ValidationTool public void loadData(String csv_root) { + FilenameFilter fileFilter = new FilenameFilter() + { + @Override + public boolean accept(File f, String name) + { + if (name.endsWith(".csv")) + return true; + if(name.endsWith(".json") && name.contains("@")) + return true; + return false; + } + }; + String directoryName = DEFAULT_DIRECTORY; String fileName = DEFAULT_FILE; String destinationDirectory = DEST_DIRECTORY; if (csv_root.equals("TEST")) - csv_root = "test_results"; + csv_root = "./test_results/scenarios/validation/"+VALIDATION_FOLDER+"/"; else if(csv_root.equals("BASELINE")) - csv_root = "verification"; + csv_root = "./verification/scenarios/validation/"+VALIDATION_FOLDER+"/"; else { - Log.warn("CSV source directory not specified, using baseline files for validation"); - csv_root = "verification"; + Log.info("Looking for csv files in "+csv_root+"..."); + File f = new File(csv_root); + if(f.list(fileFilter).length > 0) + { + if(!csv_root.endsWith("/")) + csv_root = csv_root+"/"; + destinationDirectory = csv_root; + RUN_TYPE = RunType.DATA; + } + else + { + Log.warn("No CSV files found, using baseline files for validation"); + csv_root = "./verification/scenarios/validation/"+VALIDATION_FOLDER+"/"; + } } try { - File dest = new File(DEST_DIRECTORY); - dest.mkdir(); - // Delete current dir contents - // FileUtils.delete(destinationDirectory); - // Ok, let's make them again - // FileUtils.createDirectory(destinationDirectory); + if(!destinationDirectory.equals(csv_root)) + { + File dest = new File(destinationDirectory); + dest.mkdir(); + // Delete current dir contents + // FileUtils.delete(destinationDirectory); + // Ok, let's make them again + // FileUtils.createDirectory(destinationDirectory); + } } catch(Exception ex) { Log.error("Unable to clean directories"); return; } + try { File xls = new File(directoryName+"/"+fileName); @@ -164,29 +200,21 @@ public abstract class ValidationTool Log.error("Could not find xls file "+directoryName+"/"+fileName); return; } - // Read in props file - File file = new File(cfg.getTestConfigDirectory()+"/ValidationTables.config"); - FileInputStream fileInput = new FileInputStream(file); - Properties config = new Properties(); - config.load(fileInput); - fileInput.close(); - html.append(""); html.append(""); html.append("