Skip to content

Commit 19be722

Browse files
ajbairdStevenAWhite
authored andcommitted
abaird-debug: adding locks to all actions and updating the graphing to look a bit nicer, tested and it looks like all actions dont crash the system
1 parent e5e4f2e commit 19be722

File tree

4 files changed

+64
-5
lines changed

4 files changed

+64
-5
lines changed

extern/biogears

Submodule biogears updated 116 files

projects/ui/cpp/biogears/BioGearsData.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ void BioGearsData::enableFromScenario(CDM::ScenarioData* scenario)
516516
//Substances category handled differently than others (need to find both Substance AND request)
517517
if (i == Categories::SUBSTANCES) {
518518
QString substanceName;
519-
QStringList subRequestPair;
519+
QStringList subRequestPair;
520520
//Loop over substances inside Substance Category
521521
for (int j = 0; j < rowCount(catIndex); ++j) {
522522
substanceName = _substances->child(j)->name();

projects/ui/cpp/biogears/Scenario.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2925,7 +2925,9 @@ void Scenario::create_hemorrhage_action(QString compartment, double ml_Per_min)
29252925
action->SetCompartment(compartment.remove(space).toStdString());
29262926
action->GetInitialRate().SetValue(ml_Per_min, biogears::VolumePerTimeUnit::mL_Per_min);
29272927

2928+
_engine_mutex.lock();
29282929
_action_queue.as_source().insert(std::move(action));
2930+
_engine_mutex.unlock();
29292931
}
29302932
void Scenario::create_tourniquet_action(QString compartment, int level)
29312933
{
@@ -2934,14 +2936,18 @@ void Scenario::create_tourniquet_action(QString compartment, int level)
29342936
action->SetCompartment(compartment.remove(space).toStdString());
29352937
action->SetTourniquetLevel((CDM::enumTourniquetApplicationLevel::value)level);
29362938

2939+
_engine_mutex.lock();
29372940
_action_queue.as_source().insert(std::move(action));
2941+
_engine_mutex.unlock();
29382942
}
29392943
void Scenario::create_asthma_action(double severity)
29402944
{
29412945
auto action = std::make_unique<biogears::SEAsthmaAttack>();
29422946
action->GetSeverity().SetValue(severity);
29432947

2948+
_engine_mutex.lock();
29442949
_action_queue.as_source().insert(std::move(action));
2950+
_engine_mutex.unlock();
29452951
}
29462952
void Scenario::create_substance_infusion_action(QString substance, double concentration_ug_Per_mL, double rate_mL_Per_min)
29472953
{
@@ -2950,7 +2956,9 @@ void Scenario::create_substance_infusion_action(QString substance, double concen
29502956
action->GetConcentration().SetValue(concentration_ug_Per_mL, biogears::MassPerVolumeUnit::ug_Per_mL);
29512957
action->GetRate().SetValue(rate_mL_Per_min, biogears::VolumePerTimeUnit::mL_Per_min);
29522958

2959+
_engine_mutex.lock();
29532960
_action_queue.as_source().insert(std::move(action));
2961+
_engine_mutex.unlock();
29542962

29552963
//If substance is not active, queue it for addition to physiology model (must be added to model after AdvanceTime so that substance values have been initialized)
29562964
if (!_engine->GetSubstances().IsActive(*sub)) {
@@ -2965,7 +2973,9 @@ void Scenario::create_substance_bolus_action(QString substance, int route, doubl
29652973
action->GetDose().SetValue(dose_mL, biogears::VolumeUnit::mL);
29662974
action->GetConcentration().SetValue(concentration_ug_Per_mL, biogears::MassPerVolumeUnit::ug_Per_mL);
29672975

2976+
_engine_mutex.lock();
29682977
_action_queue.as_source().insert(std::move(action));
2978+
_engine_mutex.unlock();
29692979

29702980
//If substance is not active, queue it for addition to physiology model (must be added to model after AdvanceTime so that substance values have been initialized)
29712981
if (!_engine->GetSubstances().IsActive(*sub)) {
@@ -2979,7 +2989,9 @@ void Scenario::create_substance_oral_action(QString substance, int route, double
29792989
action->SetAdminRoute((CDM::enumOralAdministration::value)route);
29802990
action->GetDose().SetValue(dose_mg, biogears::MassUnit::mg);
29812991

2992+
_engine_mutex.lock();
29822993
_action_queue.as_source().insert(std::move(action));
2994+
_engine_mutex.unlock();
29832995

29842996
//If substance is not active, queue it for addition to physiology model (must be added to model after AdvanceTime so that substance values have been initialized)
29852997
if (!_engine->GetSubstances().IsActive(*sub)) {
@@ -2993,7 +3005,9 @@ void Scenario::create_substance_compound_infusion_action(QString compound, doubl
29933005
action->GetBagVolume().SetValue(bagVolume_mL, biogears::VolumeUnit::mL);
29943006
action->GetRate().SetValue(rate_mL_Per_min, biogears::VolumePerTimeUnit::mL_Per_min);
29953007

3008+
_engine_mutex.lock();
29963009
_action_queue.as_source().insert(std::move(action));
3010+
_engine_mutex.unlock();
29973011

29983012
//If compound components are not active, queue them for addition to physiology model (must be added to model after AdvanceTime so that substance values have been initialized)
29993013
for (auto cmpt : subCompound->GetComponents()) {
@@ -3009,14 +3023,18 @@ void Scenario::create_blood_transfusion_action(QString compound, double bagVolum
30093023
action->GetBagVolume().SetValue(bagVolume_mL, biogears::VolumeUnit::mL);
30103024
action->GetRate().SetValue(rate_mL_Per_min, biogears::VolumePerTimeUnit::mL_Per_min);
30113025

3026+
_engine_mutex.lock();
30123027
_action_queue.as_source().insert(std::move(action));
3028+
_engine_mutex.unlock();
30133029
}
30143030
void Scenario::create_burn_action(double tbsa)
30153031
{
30163032
auto action = std::make_unique<biogears::SEBurnWound>();
30173033
action->GetTotalBodySurfaceArea().SetValue(tbsa);
30183034

3035+
_engine_mutex.lock();
30193036
_action_queue.as_source().insert(std::move(action));
3037+
_engine_mutex.unlock();
30203038
}
30213039
void Scenario::create_infection_action(QString location, int severity, double mic_mg_Per_L)
30223040
{
@@ -3025,7 +3043,9 @@ void Scenario::create_infection_action(QString location, int severity, double mi
30253043
action->SetSeverity((CDM::enumInfectionSeverity::value)severity);
30263044
action->GetMinimumInhibitoryConcentration().SetValue(mic_mg_Per_L, biogears::MassPerVolumeUnit::mg_Per_L);
30273045

3046+
_engine_mutex.lock();
30283047
_action_queue.as_source().insert(std::move(action));
3048+
_engine_mutex.unlock();
30293049
}
30303050
void Scenario::create_exercise_action(int type, double weight_kg, double property_1, double property_2)
30313051
{
@@ -3063,23 +3083,29 @@ void Scenario::create_exercise_action(int type, double weight_kg, double propert
30633083
break;
30643084
}
30653085

3086+
_engine_mutex.lock();
30663087
_action_queue.as_source().insert(std::move(action));
3088+
_engine_mutex.unlock();
30673089
}
30683090
void Scenario::create_pain_stimulus_action(double severity, QString location)
30693091
{
30703092
auto action = std::make_unique<biogears::SEPainStimulus>();
30713093
action->GetSeverity().SetValue(severity);
30723094
action->SetLocation(location.toStdString());
30733095

3096+
_engine_mutex.lock();
30743097
_action_queue.as_source().insert(std::move(action));
3098+
_engine_mutex.unlock();
30753099
}
30763100
void Scenario::create_traumatic_brain_injury_action(double severity, int type)
30773101
{
30783102
auto action = std::make_unique<biogears::SEBrainInjury>();
30793103
action->GetSeverity().SetValue(severity);
30803104
action->SetType((CDM::enumBrainInjuryType::value)type);
30813105

3106+
_engine_mutex.lock();
30823107
_action_queue.as_source().insert(std::move(action));
3108+
_engine_mutex.unlock();
30833109
}
30843110
void Scenario::create_tension_pneumothorax_action(double severity, int type, int side)
30853111
{
@@ -3088,22 +3114,28 @@ void Scenario::create_tension_pneumothorax_action(double severity, int type, int
30883114
action->SetType((CDM::enumPneumothoraxType::value)type);
30893115
action->SetSide((CDM::enumSide::value)side);
30903116

3117+
_engine_mutex.lock();
30913118
_action_queue.as_source().insert(std::move(action));
3119+
_engine_mutex.unlock();
30923120
}
30933121
void Scenario::create_needle_decompression_action(int state, int side)
30943122
{
30953123
auto action = std::make_unique<biogears::SENeedleDecompression>();
30963124
action->SetActive((CDM::enumOnOff::value)state);
30973125
action->SetSide((CDM::enumSide::value)side);
30983126

3127+
_engine_mutex.lock();
30993128
_action_queue.as_source().insert(std::move(action));
3129+
_engine_mutex.unlock();
31003130
}
31013131
void Scenario::create_cardiac_arrest_action(bool state)
31023132
{
31033133
auto action = std::make_unique<biogears::SECardiacArrest>();
31043134
action->SetActive(state);
31053135

3136+
_engine_mutex.lock();
31063137
_action_queue.as_source().insert(std::move(action));
3138+
_engine_mutex.unlock();
31073139
}
31083140
void Scenario::create_inhaler_action()
31093141
{
@@ -3140,8 +3172,11 @@ void Scenario::create_inhaler_action()
31403172
breathData->AddForcedExhale().Load(*exhale);
31413173

31423174
//Add inhaler configuration action and breath command actions
3175+
_engine_mutex.lock();
31433176
_action_queue.as_source().insert(std::move(action));
31443177
_action_queue.as_source().insert(std::move(breathData));
3178+
_engine_mutex.unlock();
3179+
31453180
//Add albuterol to active substance queue
31463181
if (!_engine->GetSubstances().IsActive(*albuterol)) {
31473182
_substance_queue.push_back(albuterol);
@@ -3152,35 +3187,46 @@ void Scenario::create_airway_obstruction_action(double severity)
31523187
auto action = std::make_unique<biogears::SEAirwayObstruction>();
31533188
action->GetSeverity().SetValue(severity);
31543189

3190+
_engine_mutex.lock();
31553191
_action_queue.as_source().insert(std::move(action));
3192+
_engine_mutex.unlock();
31563193
}
31573194
void Scenario::create_bronchoconstriction_action(double severity)
31583195
{
31593196
auto action = std::make_unique<biogears::SEBronchoconstriction>();
31603197
action->GetSeverity().SetValue(severity);
31613198

3199+
_engine_mutex.lock();
31623200
_action_queue.as_source().insert(std::move(action));
3201+
_engine_mutex.unlock();
31633202
}
31643203
void Scenario::create_apnea_action(double severity)
31653204
{
31663205
auto action = std::make_unique<biogears::SEApnea>();
31673206
action->GetSeverity().SetValue(severity);
31683207

3208+
_engine_mutex.lock();
31693209
_action_queue.as_source().insert(std::move(action));
3210+
_engine_mutex.unlock();
31703211
}
31713212
void Scenario::create_acute_stress_action(double severity)
31723213
{
31733214
auto action = std::make_unique<biogears::SEAcuteStress>();
31743215
action->GetSeverity().SetValue(severity);
31753216

3217+
_engine_mutex.lock();
31763218
_action_queue.as_source().insert(std::move(action));
3219+
_engine_mutex.unlock();
3220+
31773221
}
31783222
void Scenario::create_ards_action(double severity)
31793223
{
31803224
auto action = std::make_unique<biogears::SEAcuteRespiratoryDistress>();
31813225
action->GetSeverity().SetValue(severity);
31823226

3227+
_engine_mutex.lock();
31833228
_action_queue.as_source().insert(std::move(action));
3229+
_engine_mutex.unlock();
31843230
}
31853231

31863232
void Scenario::create_anesthesia_machine_action(int connection, int primaryGas, int source, double pMax_cmH2O, double peep_cmH2O, double reliefPressure_cmH2O, double inletFlow_L_Per_min, double respirationRate_Per_min, double ieRatio, double o2Fraction, double bottle1_mL, double bottle2_mL, QString leftSub, double leftSubFraction, QString rightSub, double rightSubFraction)
@@ -3214,7 +3260,9 @@ void Scenario::create_anesthesia_machine_action(int connection, int primaryGas,
32143260
}
32153261

32163262
if (config.GetConnection() == CDM::enumAnesthesiaMachineConnection::Tube) {
3263+
_engine_mutex.lock();
32173264
_action_queue.as_source().insert(std::move(intubationAction));
3265+
_engine_mutex.unlock();
32183266
}
32193267
_action_queue.as_source().insert(std::move(action));
32203268
}
@@ -3230,7 +3278,9 @@ void Scenario::create_consume_meal_action(QString mealName, double carbs_g, doub
32303278
action->GetNutrition().GetCalcium().SetValue(calcium_mg, biogears::MassUnit::mg);
32313279
action->GetNutrition().GetWater().SetValue(water_mL, biogears::VolumeUnit::mL);
32323280

3281+
_engine_mutex.lock();
32333282
_action_queue.as_source().insert(std::move(action));
3283+
_engine_mutex.unlock();
32343284
}
32353285

32363286
void Scenario::create_environment_action(QString enviroName, int surroundingType, double airDensity_kg_Per_m3, double airVelocity_m_Per_s, double ambientTemperature_C, double atmpshpericPressure_Pa, double clothingResistance_clo, double emissivity, double meanRadiantTemperature_C, double relativeHumidity, double respirationAmbientTemperature_C, double gasFractionO2, double gasFractionCO2, double gasFractionCO, double gasFractionN2, double concentrationSarin, double concentrationFireParticulate)
@@ -3271,7 +3321,10 @@ void Scenario::create_environment_action(QString enviroName, int surroundingType
32713321
environmentAction->GetConditions().GetAmbientAerosol(*ambientAerosolSarin).GetConcentration().SetValue(concentrationSarin, biogears::MassPerVolumeUnit::mg_Per_m3);
32723322
environmentAction->GetConditions().GetAmbientAerosol(*ambientAerosolForestFireParticulate).GetConcentration().SetValue(concentrationFireParticulate, biogears::MassPerVolumeUnit::mg_Per_m3);
32733323

3324+
_engine_mutex.lock();
32743325
_action_queue.as_source().insert(std::move(environmentAction));
3326+
_engine_mutex.unlock();
3327+
32753328
}
32763329

32773330
QString Scenario::patient_name_and_time()

projects/ui/qml/elements/UIPlotSeriesForm.ui.qml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import QtCharts 2.3
77
ChartView {
88
id: root
99
legend.visible : false
10-
theme : ChartView.ChartThemeBlueCerulean
10+
theme : ChartView.ChartThemeBlueNcs
11+
titleFont.family : "Arial"
1112
titleFont.pointSize : 12
1213
titleFont.bold : true
1314
antialiasing: true
1415
property alias xAxis : xAxis
1516
property alias yAxis : yAxis
17+
1618

1719
property bool calculateScale : true;
1820

@@ -31,15 +33,19 @@ ChartView {
3133
localizeNumbers: true
3234
ValueAxis {
3335
id: xAxis
34-
property int tickCount : 2
36+
property int tickCount : 5
37+
titleFont.family : "Arial"
38+
titleFont.bold : true
3539
titleText: "Simulation Time (min)"
3640
min: 0
3741
max: timeInterval_m
3842
}
3943
ValueAxis {
4044
id: yAxis
45+
titleFont.family : "Arial"
46+
titleFont.bold : true
4147
labelFormat: (max < 1.)? '%.3f' : (max < 10.)? '%.2f' : (max < 100.) ? '%.1f' : (max < 10000.) ? '%.0f' : '%.2e'
42-
tickCount : 3
48+
tickCount : 5
4349
}
4450
MouseArea {
4551
anchors.fill : parent

0 commit comments

Comments
 (0)