Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pulse Physiology Suite
engine
Commits
baab7b3d
Commit
baab7b3d
authored
Oct 23, 2019
by
Aaron Bray
Browse files
Activate new conditions, Add Multiply Scalar support, and other bug fixes
parent
71aee7a6
Changes
9
Hide whitespace changes
Inline
Side-by-side
cdm/cpp/compartment/substances/SEGasSubstanceQuantity.cpp
View file @
baab7b3d
...
...
@@ -48,13 +48,13 @@ void SEGasSubstanceQuantity::Clear()
void
SEGasSubstanceQuantity
::
SetToZero
()
{
auto
pp
=
GetPartialPressure
();
auto
&
pp
=
GetPartialPressure
();
if
(
pp
.
HasUnit
())
pp
.
SetValue
(
0
,
*
pp
.
GetUnit
());
else
pp
.
SetValue
(
0
,
PressureUnit
::
mmHg
);
auto
vol
=
GetVolume
();
auto
&
vol
=
GetVolume
();
if
(
vol
.
HasUnit
())
vol
.
SetValue
(
0
,
*
vol
.
GetUnit
());
else
...
...
cdm/cpp/compartment/substances/SELiquidSubstanceQuantity.cpp
View file @
baab7b3d
...
...
@@ -85,19 +85,19 @@ void SELiquidSubstanceQuantity::Clear()
void
SELiquidSubstanceQuantity
::
SetToZero
()
{
auto
c
=
GetConcentration
();
auto
&
c
=
GetConcentration
();
if
(
c
.
HasUnit
())
c
.
SetValue
(
0
,
*
c
.
GetUnit
());
else
c
.
SetValue
(
0
,
MassPerVolumeUnit
::
mg_Per_mL
);
auto
m
=
GetMass
();
auto
&
m
=
GetMass
();
if
(
m
.
HasUnit
())
m
.
SetValue
(
0
,
*
m
.
GetUnit
());
else
m
.
SetValue
(
0
,
MassUnit
::
mg
);
auto
mol
=
GetMolarity
();
auto
&
mol
=
GetMolarity
();
if
(
mol
.
HasUnit
())
mol
.
SetValue
(
0
,
*
mol
.
GetUnit
());
else
...
...
@@ -105,7 +105,7 @@ void SELiquidSubstanceQuantity::SetToZero()
if
(
m_Substance
.
GetState
()
==
eSubstance_State
::
Gas
)
{
auto
pp
=
GetPartialPressure
();
auto
&
pp
=
GetPartialPressure
();
if
(
pp
.
HasUnit
())
pp
.
SetValue
(
0
,
*
pp
.
GetUnit
());
else
...
...
@@ -115,19 +115,19 @@ void SELiquidSubstanceQuantity::SetToZero()
if
(
m_isO2
||
m_isCO
||
m_isCO2
)
GetSaturation
().
SetValue
(
0
);
auto
mc
=
GetMassCleared
();
auto
&
mc
=
GetMassCleared
();
if
(
mc
.
HasUnit
())
mc
.
SetValue
(
0
,
*
mc
.
GetUnit
());
else
mc
.
SetValue
(
0
,
MassUnit
::
mg
);
auto
md
=
GetMassDeposited
();
auto
&
md
=
GetMassDeposited
();
if
(
md
.
HasUnit
())
md
.
SetValue
(
0
,
*
md
.
GetUnit
());
else
md
.
SetValue
(
0
,
MassUnit
::
mg
);
auto
me
=
GetMassExcreted
();
auto
&
me
=
GetMassExcreted
();
if
(
me
.
HasUnit
())
me
.
SetValue
(
0
,
*
me
.
GetUnit
());
else
...
...
@@ -379,7 +379,7 @@ SEScalarAmountPerVolume& SELiquidSubstanceQuantity::GetMolarity()
m_Molarity
->
Invalidate
();
else
{
double
molarity_mmol_Per_mL
=
GetMass
(
MassUnit
::
mg
)
/
m_Substance
.
GetMolarMass
(
MassPerAmountUnit
::
mg_Per_mmol
)
/
m_Compartment
.
GetVolume
(
VolumeUnit
::
mL
);
double
molarity_mmol_Per_mL
=
GetMass
(
MassUnit
::
mg
)
/
m_Substance
.
GetMolarMass
(
MassPerAmountUnit
::
mg_Per_mmol
)
/
m_Compartment
.
GetVolume
(
VolumeUnit
::
mL
);
m_Molarity
->
SetValue
(
molarity_mmol_Per_mL
,
AmountPerVolumeUnit
::
mmol_Per_mL
);
}
m_Molarity
->
SetReadOnly
(
true
);
...
...
cdm/cpp/engine/SEConditionManager.cpp
View file @
baab7b3d
...
...
@@ -408,6 +408,8 @@ const SEInitialEnvironmentConditions* SEConditionManager::GetInitialEnvironmentC
void
SEConditionManager
::
GetAllConditions
(
std
::
vector
<
const
SECondition
*>&
conditions
)
const
{
if
(
HasAcuteRespiratoryDistressSyndrome
())
conditions
.
push_back
(
GetAcuteRespiratoryDistressSyndrome
());
if
(
HasChronicAnemia
())
conditions
.
push_back
(
GetChronicAnemia
());
if
(
HasChronicObstructivePulmonaryDisease
())
...
...
@@ -424,12 +426,17 @@ void SEConditionManager::GetAllConditions(std::vector<const SECondition*>& condi
conditions
.
push_back
(
GetImpairedAlveolarExchange
());
if
(
HasLobarPneumonia
())
conditions
.
push_back
(
GetLobarPneumonia
());
if
(
HasSepsis
())
conditions
.
push_back
(
GetSepsis
());
if
(
HasInitialEnvironmentConditions
())
conditions
.
push_back
(
GetInitialEnvironmentConditions
());
}
bool
SEConditionManager
::
IsEmpty
()
const
{
if
(
HasAcuteRespiratoryDistressSyndrome
())
return
false
;
if
(
HasChronicAnemia
())
return
false
;
if
(
HasChronicObstructivePulmonaryDisease
())
...
...
@@ -446,6 +453,9 @@ bool SEConditionManager::IsEmpty() const
return
false
;
if
(
HasLobarPneumonia
())
return
false
;
if
(
HasSepsis
())
return
false
;
if
(
HasInitialEnvironmentConditions
())
return
false
;
return
true
;
...
...
cdm/cpp/properties/SEScalar.cpp
View file @
baab7b3d
...
...
@@ -36,7 +36,7 @@ SEScalar::~SEScalar()
void
SEScalar
::
Clear
()
{
SEProperty
::
Clear
();
SEProperty
::
Clear
();
m_readOnly
=
false
;
Invalidate
();
}
...
...
@@ -51,7 +51,7 @@ bool SEScalar::Set(const SEScalar& s)
throw
CommonDataModelException
(
"Scalar is marked read-only"
);
m_value
=
s
.
m_value
;
m_isnan
=
(
std
::
isnan
(
m_value
))
?
true
:
false
;
m_isinf
=
(
std
::
isinf
(
m_value
))
?
true
:
false
;
m_isinf
=
(
std
::
isinf
(
m_value
))
?
true
:
false
;
return
true
;
}
...
...
@@ -154,6 +154,27 @@ double SEScalar::IncrementValue(double d)
return
m_value
;
}
double
SEScalar
::
Multiply
(
const
SEScalar
&
s
)
{
if
(
!
s
.
IsValid
())
Invalidate
();
else
MultiplyValue
(
s
.
GetValue
());
return
m_value
;
}
double
SEScalar
::
MultiplyValue
(
double
d
)
{
if
(
!
IsValid
())
{
SetValue
(
d
);
return
d
;
}
SetValue
(
m_value
*
d
);
return
m_value
;
}
void
SEScalar
::
Average
(
int
cnt
)
{
if
(
!
IsValid
()
||
cnt
==
0
)
...
...
cdm/cpp/properties/SEScalar.h
View file @
baab7b3d
...
...
@@ -66,6 +66,9 @@ public:
double
Increment
(
const
SEScalar
&
s
);
double
IncrementValue
(
double
d
);
double
Multiply
(
const
SEScalar
&
s
);
double
MultiplyValue
(
double
d
);
void
Average
(
int
cnt
);
bool
Equals
(
const
SEScalar
&
to
)
const
;
...
...
@@ -117,6 +120,7 @@ public:
virtual
void
SetValue
(
double
d
,
const
CCompoundUnit
&
unit
)
=
0
;
virtual
void
ForceValue
(
double
d
,
const
CCompoundUnit
&
unit
)
=
0
;
virtual
double
IncrementValue
(
double
d
,
const
CCompoundUnit
&
unit
)
=
0
;
virtual
double
MultiplyValue
(
double
d
,
const
CCompoundUnit
&
unit
)
=
0
;
protected:
virtual
const
CCompoundUnit
*
GetCompoundUnit
(
const
std
::
string
&
unit
)
const
=
0
;
...
...
@@ -145,6 +149,7 @@ protected:
virtual
void
SetValue
(
double
d
,
const
CCompoundUnit
&
unit
);
virtual
void
ForceValue
(
double
d
,
const
CCompoundUnit
&
unit
);
virtual
double
IncrementValue
(
double
d
,
const
CCompoundUnit
&
unit
);
virtual
double
MultiplyValue
(
double
d
,
const
CCompoundUnit
&
unit
);
virtual
const
CCompoundUnit
*
GetCompoundUnit
(
const
std
::
string
&
unit
)
const
;
...
...
@@ -171,6 +176,12 @@ public:
double
Increment
(
const
SEScalar
&
s
)
=
delete
;
// Must provide a unit
virtual
double
Increment
(
const
SEScalarQuantity
&
s
);
double
MultiplyValue
(
double
d
)
=
delete
;
// Must provide a unit
virtual
double
MultiplyValue
(
double
d
,
const
Unit
&
unit
);
double
Multiply
(
const
SEScalar
&
s
)
=
delete
;
// Must provide a unit
virtual
double
Multiply
(
const
SEScalarQuantity
&
s
);
bool
Equals
(
const
SEScalar
&
to
)
const
=
delete
;
// Must provide a unit
virtual
bool
Equals
(
const
SEScalarQuantity
<
Unit
>&
to
)
const
;
...
...
cdm/cpp/properties/SEScalar.inl
View file @
baab7b3d
...
...
@@ -181,6 +181,38 @@ double SEScalarQuantity<Unit>::IncrementValue(double d, const CCompoundUnit& uni
return this->IncrementValue(d, *u);
}
template<typename Unit>
double SEScalarQuantity<Unit>::Multiply(const SEScalarQuantity<Unit>& s)
{
if (!s.IsValid())
this->Invalidate();
else
return this->MultiplyValue(s.m_value, *s.m_unit);
return m_value;
}
template<typename Unit>
double SEScalarQuantity<Unit>::MultiplyValue(double d, const Unit& unit)
{
if (!IsValid())
{
this->SetValue(d, unit);
return d;
}
this->SetValue(m_value * Convert(d, unit, *m_unit), *m_unit);
return Convert(m_value, *m_unit, unit);
}
template<typename Unit>
double SEScalarQuantity<Unit>::MultiplyValue(double d, const CCompoundUnit& unit)
{
const Unit* u = dynamic_cast<const Unit*>(&unit);
if (u == nullptr)
throw CommonDataModelException("Provided unit is not of proper quantity type");
return this->MultiplyValue(d, *u);
}
template<typename Unit>
bool SEScalarQuantity<Unit>::Equals(const SEScalarQuantity<Unit>& to) const
{
...
...
cdm/cpp/system/physiology/SERespiratorySystem.cpp
View file @
baab7b3d
...
...
@@ -36,6 +36,7 @@ SERespiratorySystem::SERespiratorySystem(Logger* logger) : SESystem(logger)
m_InspiratoryFlow
=
nullptr
;
m_InspiratoryPulmonaryResistance
=
nullptr
;
m_IntrapleuralPressure
=
nullptr
;
m_IntrapulmonaryPressure
=
nullptr
;
m_LungCompliance
=
nullptr
;
m_MaximalInspiratoryPressure
=
nullptr
;
m_PatientPowerOfBreathing
=
nullptr
;
...
...
@@ -61,6 +62,7 @@ SERespiratorySystem::SERespiratorySystem(Logger* logger) : SESystem(logger)
m_TransairwayPressure
=
nullptr
;
m_TransalveolarPressure
=
nullptr
;
m_TransChestWallPressure
=
nullptr
;
m_TransMusclePressure
=
nullptr
;
m_TranspulmonaryPressure
=
nullptr
;
m_TransrespiratoryPressure
=
nullptr
;
m_TransthoracicPressure
=
nullptr
;
...
...
@@ -93,6 +95,7 @@ void SERespiratorySystem::Clear()
SAFE_DELETE
(
m_InspiratoryFlow
);
SAFE_DELETE
(
m_InspiratoryPulmonaryResistance
);
SAFE_DELETE
(
m_IntrapleuralPressure
);
SAFE_DELETE
(
m_IntrapulmonaryPressure
);
SAFE_DELETE
(
m_LungCompliance
);
SAFE_DELETE
(
m_MaximalInspiratoryPressure
);
SAFE_DELETE
(
m_PatientPowerOfBreathing
);
...
...
@@ -118,6 +121,7 @@ void SERespiratorySystem::Clear()
SAFE_DELETE
(
m_TransairwayPressure
);
SAFE_DELETE
(
m_TransalveolarPressure
);
SAFE_DELETE
(
m_TransChestWallPressure
);
SAFE_DELETE
(
m_TransMusclePressure
);
SAFE_DELETE
(
m_TranspulmonaryPressure
);
SAFE_DELETE
(
m_TransrespiratoryPressure
);
SAFE_DELETE
(
m_TransthoracicPressure
);
...
...
engine/cpp/controller/Engine.cpp
View file @
baab7b3d
...
...
@@ -175,8 +175,6 @@ bool PulseEngine::InitializeEngine(const SEPatientConfiguration& patient_configu
if
(
patient_configuration
.
HasConditions
())
m_Conditions
->
Copy
(
*
patient_configuration
.
GetConditions
());
AtSteadyState
(
EngineState
::
AtInitialStableState
);
// This will peek at conditions
// Copy any changes to the current patient to the initial patient
m_InitialPatient
->
Copy
(
*
m_CurrentPatient
);
m_State
=
EngineState
::
SecondaryStabilization
;
// Apply conditions and anything else to the physiology
...
...
@@ -193,6 +191,8 @@ bool PulseEngine::InitializeEngine(const SEPatientConfiguration& patient_configu
return
false
;
}
AtSteadyState
(
EngineState
::
AtSecondaryStableState
);
// Copy any changes to the current patient to the initial patient
m_InitialPatient
->
Copy
(
*
m_CurrentPatient
);
m_State
=
EngineState
::
Active
;
// Hook up the handlers (Note events will still be in the log)
...
...
test/config/DebugRun.config
View file @
baab7b3d
...
...
@@ -31,6 +31,6 @@ Macro EngineUnitTest=EngineUnitTestDriver FastPlot Baseline=unit_tests/pulse/ Co
Macro
EngineUnitTestFull
=
EngineUnitTestDriver
FullPlot
Baseline
=
unit_tests
/
pulse
/
Computed
=./
test_results
/
unit_tests
/
pulse
Macro
ScenarioTest
=
ScenarioTestDriver
FastPlot
Baseline
=
scenarios
/
Computed
=./
test_results
/
scenarios
#patient/BasicStandard.json = ScenarioTest
patient
/
ARDSExacerbation
.
json
=
ScenarioTest
#patient/ARDSModerateBothLungs.json = ScenarioTest
RespiratoryDriver
=
EngineUnitTest
Results
=
RespiratoryDriverOutput
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment