Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
fmg005
clasim
Commits
76721259
Commit
76721259
authored
Apr 20, 2019
by
pkda001
Browse files
updated config to use periods instead of rates.
parent
19b83884
Changes
13
Hide whitespace changes
Inline
Side-by-side
resources/scenario.cfg
View file @
76721259
...
...
@@ -4,15 +4,15 @@
## rate : Number of samples per second ## MAX: 50.0 Hz ## Type: double
monitor = {
input_rate
= 0.0
2
;
## MUST be multiple of 50.0
output_rate = 0.01; ## Must be less than monitor.rate and also
multiple of
5
0.0
input_period = 30.0; # in secs MUST be multiple of 0.02
output_period
=
6
0.0;
# in secs MUST be >= monitor.input_period
# and be
multiple of 0.0
2
};
controller = {
rate =
0.0
1;
period = 60.0; # in secs MUST be >= monitor.output_period
# and be multiple of
0.0
2
patientData = {
enabled = ["HeartRate", "BloodPressure", "BloodVolume"];
}
...
...
@@ -24,22 +24,19 @@ controller = {
pump = {
rate = 1.0; # Intercommand delay -> to be used later
delay = 15.0;
period = 60.0; # Intercommand delay -> to be used later
delay = 15.0; # in secs
};
simulation = {
patients = {
names = ["Hassan", "Gus", "ExtremeFemale"];
}
time = {
time = {
run = 3600.0; # Time -> Seconds # How long should simulation run
injury_start =
1
5.0; # When should injury be introduced to patient
injury_start = 5
0
.0; # When should injury be introduced to patient
injury_stop = 700.0; # When should injury be stopped
}
path = "results"; # folder to store out sim output files -> to be used later
};
simsrc/mcps2018/algo1/Controller.cpp
View file @
76721259
#include "Controller.h"
//Default constructor
Controller
::
Controller
()
:
M
AX_RATE_Hz
(
5
0.0
)
{
Controller
::
Controller
()
:
M
IN_PERIOD_SECS
(
0.0
2
)
{
}
// Overloard Constructor
Controller
::
Controller
(
CMD
::
Environment
*
env
,
PhysiologyData
*
data
,
std
::
map
<
string
,
Pump
*>&
pumps
)
:
m_env
(
env
),
m_data
(
data
),
m_pumps
(
pumps
),
M
AX_RATE_Hz
(
5
0.0
)
{
m_data
(
data
),
m_pumps
(
pumps
),
M
IN_PERIOD_SECS
(
0.0
2
)
{
// Initalize algorithm configuration variables
currentNorepiInfusionRate
=
0
;
...
...
@@ -58,7 +58,7 @@ void Controller::LoadConfig(std::unique_ptr<PhysiologyEngine>& engine, const std
// Extract the rate and assign it to m_rate_Hz
controller_
rate_Hz
=
cf
->
lookup
(
"controller.
rate
"
);
controller_
period_secs
=
cf
->
lookup
(
"controller.
period
"
);
Setting
&
root
=
cf
->
getRoot
();
...
...
@@ -94,12 +94,13 @@ void Controller::LoadConfig(std::unique_ptr<PhysiologyEngine>& engine, const std
WAIT_5_MIN
=
(
60
*
WAIT_5_MIN
)
/
time_step
;
// 5 min
// integer input rate for controller
input_period
=
(
1
/
controller_
rate_Hz
)
/
time_step
;
input_period
=
controller_
period_secs
/
time_step
;
//is_input_multiple = fmod(MAX_RATE_Hz, controller_rate_Hz) == 0.0;
is_input_multiple
=
((
int
)(
MAX_RATE_Hz
*
1000
))
%
((
int
)(
controller_rate_Hz
*
1000
))
==
0
;
is_input_multiple
=
((
int
)(
controller_period_secs
*
1000
))
%
((
int
)(
MIN_PERIOD_SECS
*
1000
))
==
0
;
if
(
controller_
rate_Hz
>
MAX_RATE_Hz
)
{
if
(
controller_
period_secs
<
MIN_PERIOD_SECS
)
{
cout
<<
"
\n
Controller rate is greater than MAX: 50.0
\n\n
"
;
Stop
();
...
...
simsrc/mcps2018/algo1/MedicalDevice.cpp
View file @
76721259
...
...
@@ -2,8 +2,8 @@
// Constructor
MedicalDevice
::
MedicalDevice
()
:
m_
rate_Hz
(
5
0.0
),
M
AX_RATE_Hz
(
5
0.0
)
// Initialize member variables
MedicalDevice
::
MedicalDevice
()
:
m_
input_period_secs
(
0.0
2
),
M
IN_PERIOD_SECS
(
0.0
2
)
// Initialize member variables
{
};
...
...
simsrc/mcps2018/algo1/Monitor.cpp
View file @
76721259
...
...
@@ -68,27 +68,29 @@ void Monitor::update(std::unique_ptr<PhysiologyEngine>& engine) {
void
Monitor
::
LoadConfig
(
std
::
unique_ptr
<
PhysiologyEngine
>&
engine
,
const
std
::
shared_ptr
<
Config
>&
cf
)
{
m_
rate_Hz
=
cf
->
lookup
(
"monitor.input_
rate
"
);
output_
rate_Hz
=
cf
->
lookup
(
"monitor.output_
rate
"
);
m_
input_period_secs
=
cf
->
lookup
(
"monitor.input_
period
"
);
m_
output_
period_secs
=
cf
->
lookup
(
"monitor.output_
period
"
);
// Get engine time step/period
time_step
=
engine
->
GetTimeStep
(
TimeUnit
::
s
);
/*Had issues with fmod*/
// Check if rate provided in config file is multiple of M
AX_RATE_Hz
//is_input_multiple = fmod(M
AX_RATE_Hz, m_rate_Hz
) == 0.0;
//is_output_multiple = fmod(M
AX_RATE_Hz, output_rate_Hz
) == 0.0;
// Check if rate provided in config file is multiple of M
IN_PERIOD_SECS
//is_input_multiple = fmod(M
IN_PERIOD_SECS, m_input_period_secs
) == 0.0;
//is_output_multiple = fmod(M
IN_PERIOD_SECS, m_output_period_secs
) == 0.0;
is_input_multiple
=
((
int
)(
MAX_RATE_Hz
*
1000
))
%
((
int
)(
m_rate_Hz
*
1000
))
==
0
;
is_output_multiple
=
((
int
)(
MAX_RATE_Hz
*
1000
))
%
((
int
)(
output_rate_Hz
*
1000
))
==
0
;
is_input_multiple
=
((
int
)(
m_input_period_secs
*
1000
))
%
((
int
)(
MIN_PERIOD_SECS
*
1000
))
==
0
;
is_output_multiple
=
((
int
)(
m_output_period_secs
*
1000
))
%
((
int
)(
MIN_PERIOD_SECS
*
1000
))
==
0
;
// Convert frequence to integer period
//i.e. freq:25Hz period:0.04 int_period: (0.04/time_step) = 2
input_period
=
(
1
/
m_rate_Hz
)
/
time_step
;
output_period
=
(
1
/
output_
rate_Hz
)
/
time_step
;
input_period
=
m_input_period_secs
/
time_step
;
output_period
=
m_
output_
period_secs
/
time_step
;
if
(
m_
rate_Hz
>
MAX_RATE_Hz
||
output_
rate_Hz
>
MAX_RATE_Hz
)
{
if
(
m_
input_period_secs
<
MIN_PERIOD_SECS
||
m_
output_
period_secs
<
MIN_PERIOD_SECS
)
{
cout
<<
"
\n
One of the monitor rate values is greater than MAX: 50.0
\n\n
"
;
Stop
();
...
...
simsrc/mcps2018/algo1/Pump.cpp
View file @
76721259
...
...
@@ -66,7 +66,7 @@ std::shared_ptr<Config>& cf) {
// Grab pump settings from config file
pump_
rate_Hz
=
cf
->
lookup
(
"pump.
rate
"
);
pump_
period_sec
=
cf
->
lookup
(
"pump.
period
"
);
pump_delay
=
cf
->
lookup
(
"pump.delay"
);
...
...
@@ -77,14 +77,15 @@ std::shared_ptr<Config>& cf) {
// integer input rate for controller
input_period
=
(
1
/
pump_
rate_Hz
)
/
time_step
;
input_period
=
pump_
period_sec
/
time_step
;
delay_period
=
(
pump_delay
/
time_step
);
period
=
input_period
+
delay_period
;
is_input_multiple
=
fmod
(
MAX_RATE_Hz
,
pump_rate_Hz
)
==
0.0
;
is_input_multiple
=
((
int
)(
1000
*
pump_period_sec
))
%
((
int
)(
1000
*
MIN_PERIOD_SECS
))
==
0.0
;
if
(
pump_
rate_Hz
>
MAX_RATE_Hz
)
{
if
(
pump_
period_sec
<
MIN_PERIOD_SECS
)
{
cout
<<
"
\n
Pump rate is greater than MAX: 50.0
\n\n
"
;
Stop
();
...
...
simsrc/mcps2018/algo2/Controller.cpp
View file @
76721259
#include "Controller.h"
//Default constructor
Controller
::
Controller
()
:
M
AX_RATE_Hz
(
5
0.0
)
{
Controller
::
Controller
()
:
M
IN_PERIOD_SECS
(
0.0
2
)
{
}
// Overloard Constructor
Controller
::
Controller
(
CMD
::
Environment
*
env
,
PhysiologyData
*
data
,
std
::
map
<
string
,
Pump
*>&
pumps
)
:
m_env
(
env
),
m_data
(
data
),
m_pumps
(
pumps
),
M
AX_RATE_Hz
(
5
0.0
)
{
m_data
(
data
),
m_pumps
(
pumps
),
M
IN_PERIOD_SECS
(
0.0
2
)
{
// Initalize algorithm configuration variables
currentNorepiInfusionRate
=
0
;
...
...
@@ -58,7 +58,7 @@ void Controller::LoadConfig(std::unique_ptr<PhysiologyEngine>& engine, const std
// Extract the rate and assign it to m_rate_Hz
controller_
rate_Hz
=
cf
->
lookup
(
"controller.
rate
"
);
controller_
period_secs
=
cf
->
lookup
(
"controller.
period
"
);
Setting
&
root
=
cf
->
getRoot
();
...
...
@@ -94,12 +94,13 @@ void Controller::LoadConfig(std::unique_ptr<PhysiologyEngine>& engine, const std
WAIT_5_MIN
=
(
60
*
WAIT_5_MIN
)
/
time_step
;
// 5 min
// integer input rate for controller
input_period
=
(
1
/
controller_
rate_Hz
)
/
time_step
;
input_period
=
controller_
period_secs
/
time_step
;
//is_input_multiple = fmod(MAX_RATE_Hz, controller_rate_Hz) == 0.0;
is_input_multiple
=
((
int
)(
MAX_RATE_Hz
*
1000
))
%
((
int
)(
controller_rate_Hz
*
1000
))
==
0
;
is_input_multiple
=
((
int
)(
controller_period_secs
*
1000
))
%
((
int
)(
MIN_PERIOD_SECS
*
1000
))
==
0
;
if
(
controller_
rate_Hz
>
MAX_RATE_Hz
)
{
if
(
controller_
period_secs
<
MIN_PERIOD_SECS
)
{
cout
<<
"
\n
Controller rate is greater than MAX: 50.0
\n\n
"
;
Stop
();
...
...
simsrc/mcps2018/algo2/MedicalDevice.cpp
View file @
76721259
...
...
@@ -3,7 +3,7 @@
// Constructor
MedicalDevice
::
MedicalDevice
()
:
m_
rate_Hz
(
5
0.0
),
M
AX_RATE_Hz
(
5
0.0
)
// Initialize member variables
m_
input_period_secs
(
0.0
2
),
M
IN_PERIOD_SECS
(
0.0
2
)
// Initialize member variables
{
};
...
...
simsrc/mcps2018/algo2/Monitor.cpp
View file @
76721259
...
...
@@ -68,27 +68,29 @@ void Monitor::update(std::unique_ptr<PhysiologyEngine>& engine) {
void
Monitor
::
LoadConfig
(
std
::
unique_ptr
<
PhysiologyEngine
>&
engine
,
const
std
::
shared_ptr
<
Config
>&
cf
)
{
m_
rate_Hz
=
cf
->
lookup
(
"monitor.input_
rate
"
);
output_
rate_Hz
=
cf
->
lookup
(
"monitor.output_
rate
"
);
m_
input_period_secs
=
cf
->
lookup
(
"monitor.input_
period
"
);
m_
output_
period_secs
=
cf
->
lookup
(
"monitor.output_
period
"
);
// Get engine time step/period
time_step
=
engine
->
GetTimeStep
(
TimeUnit
::
s
);
/*Had issues with fmod*/
// Check if rate provided in config file is multiple of M
AX_RATE_Hz
//is_input_multiple = fmod(M
AX_RATE_Hz, m_rate_Hz
) == 0.0;
//is_output_multiple = fmod(M
AX_RATE_Hz, output_rate_Hz
) == 0.0;
// Check if rate provided in config file is multiple of M
IN_PERIOD_SECS
//is_input_multiple = fmod(M
IN_PERIOD_SECS, m_input_period_secs
) == 0.0;
//is_output_multiple = fmod(M
IN_PERIOD_SECS, m_output_period_secs
) == 0.0;
is_input_multiple
=
((
int
)(
MAX_RATE_Hz
*
1000
))
%
((
int
)(
m_rate_Hz
*
1000
))
==
0
;
is_output_multiple
=
((
int
)(
MAX_RATE_Hz
*
1000
))
%
((
int
)(
output_rate_Hz
*
1000
))
==
0
;
is_input_multiple
=
((
int
)(
m_input_period_secs
*
1000
))
%
((
int
)(
MIN_PERIOD_SECS
*
1000
))
==
0
;
is_output_multiple
=
((
int
)(
m_output_period_secs
*
1000
))
%
((
int
)(
MIN_PERIOD_SECS
*
1000
))
==
0
;
// Convert frequence to integer period
//i.e. freq:25Hz period:0.04 int_period: (0.04/time_step) = 2
input_period
=
(
1
/
m_rate_Hz
)
/
time_step
;
output_period
=
(
1
/
output_
rate_Hz
)
/
time_step
;
input_period
=
m_input_period_secs
/
time_step
;
output_period
=
m_
output_
period_secs
/
time_step
;
if
(
m_
rate_Hz
>
MAX_RATE_Hz
||
output_
rate_Hz
>
MAX_RATE_Hz
)
{
if
(
m_
input_period_secs
<
MIN_PERIOD_SECS
||
m_
output_
period_secs
<
MIN_PERIOD_SECS
)
{
cout
<<
"
\n
One of the monitor rate values is greater than MAX: 50.0
\n\n
"
;
Stop
();
...
...
simsrc/mcps2018/include/Controller.h
View file @
76721259
...
...
@@ -32,11 +32,11 @@ class Pump;
class
Controller
{
private:
double
controller_
rate_Hz
;
// The rate at which device receives or sends data
double
controller_
period_secs
;
// The rate at which device receives or sends data
double
time_step
;
int
new_rate
;
Config
cfg
;
// API for accessing configuration files
const
double
M
AX_RATE_Hz
;
const
double
M
IN_PERIOD_SECS
;
bool
is_input_multiple
;
//static const int array_sz;
...
...
simsrc/mcps2018/include/MedicalDevice.h
View file @
76721259
...
...
@@ -19,11 +19,11 @@ using namespace libconfig;
class
MedicalDevice
{
protected:
double
m_
rate_Hz
;
// The rate at which device receives or sends data
const
double
M
AX_RATE_Hz
;
// Maximum rate in Hz at which data can be transfered
double
m_
input_period_secs
;
// The rate at which device receives or sends data
const
double
M
IN_PERIOD_SECS
;
// Maximum rate in Hz at which data can be transfered
Config
m_cfg
;
// API for accessing configuration files
public:
MedicalDevice
();
...
...
@@ -34,12 +34,10 @@ class MedicalDevice {
// Load the configuration file to capture device rate
virtual
void
LoadConfig
(
std
::
unique_ptr
<
PhysiologyEngine
>&
,
const
std
::
shared_ptr
<
Config
>&
cf
);
LoadConfig
(
std
::
unique_ptr
<
PhysiologyEngine
>&
,
const
std
::
shared_ptr
<
Config
>&
cf
);
// Destructor
~
MedicalDevice
();
};
#endif
simsrc/mcps2018/include/Monitor.h
View file @
76721259
...
...
@@ -34,8 +34,8 @@ class Monitor : public MedicalDevice {
bool
HeartRate
;
bool
BloodPressure
;
double
output_
rate_Hz
;
double
m_
rate_Hz
;
double
m_
output_
period_secs
;
double
m_
input_period_secs
;
double
time_step
;
double
heart_rate
;
...
...
simsrc/mcps2018/include/Pump.h
View file @
76721259
...
...
@@ -32,7 +32,7 @@ class Pump : public MedicalDevice {
bool
is_input_multiple
;
double
pump_
rate_Hz
;
double
pump_
period_sec
;
double
pump_delay
;
double
time_step
;
double
delay_period
;
...
...
simsrc/mcps2018/scenario.cfg
0 → 100644
View file @
76721259
# Configuration file for Heart Rate Scenario
## rate : Number of samples per second ## MAX: 50.0 Hz ## Type: double
monitor = {
input_period = 30.0; # in secs MUST be multiple of 0.02
output_period = 60.0; # in secs MUST be >= monitor.input_period
# and be multiple of 0.02
};
controller = {
period = 60.0; # in secs MUST be >= monitor.output_period
# and be multiple of 0.02
patientData = {
enabled = ["HeartRate", "BloodPressure", "BloodVolume"];
}
algorithm= {
wait_10 = 10.0; # Wait for 10 minutes
wait_5 = 5.0; # Wait for 5 minutes
}
};
pump = {
period = 60.0; # Intercommand delay -> to be used later
delay = 15.0; # in secs
};
simulation = {
patients = {
names = ["Hassan"];
}
time = {
run = 3600.0; # Time -> Seconds # How long should simulation run
injury_start = 50.0; # When should injury be introduced to patient
injury_stop = 700.0; # When should injury be stopped
}
path = "results"; # folder to store out sim output files -> to be used later
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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