BioGearsCompartments.h
1 /**************************************************************************************
2 Copyright 2015 Applied Research Associates, Inc.
3 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4 this file except in compliance with the License. You may obtain a copy of the License
5 at:
6 http://www.apache.org/licenses/LICENSE-2.0
7 Unless required by applicable law or agreed to in writing, software distributed under
8 the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
9 CONDITIONS OF ANY KIND, either express or implied. See the License for the
10 specific language governing permissions and limitations under the License.
11 **************************************************************************************/
12 
13 #pragma once
14 
15 #include <biogears/cdm/compartment/SECompartmentManager.h>
16 #include <biogears/cdm/compartment/fluid/SELiquidCompartment.h>
17 
18 namespace biogears {
19 class BioGears;
20 class SEGasCompartmentGraph;
24 class BIOGEARS_API BioGearsCompartments : public SECompartmentManager {
25  friend class BioGearsSubstances;
26 
27 public:
28  static auto make_unique(BioGears& bg) -> std::unique_ptr<BioGearsCompartments>;
30  virtual ~BioGearsCompartments();
31 
32  void Clear();
33 
34  virtual bool Load(const CDM::CompartmentManagerData& in, SECircuitManager* circuits = nullptr);
35 
36  void StateChange();
38  {
39  m_UpdateActiveAirwayGraph = true;
40  m_UpdateActiveAerosolGraph = true;
41  }
42 
43  SELiquidCompartmentGraph& GetActiveCardiovascularGraph();
44  SELiquidCompartmentGraph& GetCardiovascularGraph();
45  SELiquidCompartmentGraph& GetCerebralGraph();
46  SELiquidCompartmentGraph& GetRenalGraph();
47 
48  SEGasCompartmentGraph& GetActiveRespiratoryGraph();
49  SEGasCompartmentGraph& GetRespiratoryGraph();
50  SEGasCompartmentGraph& GetRespiratoryAndAnesthesiaMachineGraph();
51  SEGasCompartmentGraph& GetRespiratoryAndInhalerGraph();
52  SEGasCompartmentGraph& GetRespiratoryAndMechanicalVentilatorGraph();
53 
54  SEGasCompartmentGraph& GetAnesthesiaMachineGraph();
55 
56  SELiquidCompartmentGraph& GetActiveAerosolGraph();
57  SELiquidCompartmentGraph& GetAerosolGraph();
58  SELiquidCompartmentGraph& GetAerosolAndInhalerGraph();
59 
60  // Compartment Helpers
61  const std::vector<SELiquidCompartment*>& GetAerosolCompartments() { return m_AerosolCompartments; }
62  const std::vector<SELiquidCompartment*>& GetAerosolLeafCompartments() { return m_AerosolLeafCompartments; }
63 
64  const std::vector<SELiquidCompartment*>& GetChymeCompartments() { return m_ChymeCompartments; }
65  const std::vector<SELiquidCompartment*>& GetChymeLeafCompartments() { return m_ChymeLeafCompartments; }
66 
67  const std::vector<SEGasCompartment*>& GetPulmonaryCompartments() { return m_PulmonaryCompartments; }
68  const std::vector<SEGasCompartment*>& GetPulmonaryLeafCompartments() { return m_PulmonaryLeafCompartments; }
69 
70  const std::vector<SEThermalCompartment*>& GetTemperatureCompartments() { return m_TemperatureCompartments; }
71  const std::vector<SEThermalCompartment*>& GetTemperatureLeafCompartments() { return m_TemperatureLeafCompartments; }
72 
73  const std::vector<SETissueCompartment*>& GetTissueCompartments() { return m_TissueCompartments; }
74  const std::vector<SETissueCompartment*>& GetTissueLeafCompartments() { return m_TissueLeafCompartments; }
75 
76  const std::vector<SELiquidCompartment*>& GetUrineCompartments() { return m_UrineCompartments; }
77  const std::vector<SELiquidCompartment*>& GetUrineLeafCompartments() { return m_UrineLeafCompartments; }
78 
79  const std::vector<SELiquidCompartment*>& GetVascularCompartments() { return m_VascularCompartments; }
80  const std::vector<SELiquidCompartment*>& GetVascularLeafCompartments() { return m_VascularLeafCompartments; }
81 
82  const std::vector<SEGasCompartment*>& GetAnesthesiaMachineCompartments() { return m_AnesthesiaMachineCompartments; }
83  const std::vector<SEGasCompartment*>& GetAnesthesiaMachineLeafCompartments() { return m_AnesthesiaMachineLeafCompartments; }
84 
85  const std::vector<SEGasCompartment*>& GetInhalerCompartments() { return m_InhalerCompartments; }
86  const std::vector<SEGasCompartment*>& GetInhalerLeafCompartments() { return m_InhalerLeafCompartments; }
87 
88  const std::vector<SELiquidCompartment*>& GetInhalerAerosolCompartments() { return m_InhalerAerosolCompartments; }
89  const std::vector<SELiquidCompartment*>& GetInhalerAerosolLeafCompartments() { return m_InhalerAerosolLeafCompartments; }
90 
91  const std::vector<SEGasCompartment*>& GetMechanicalVentilatorCompartments() { return m_MechanicalVentilatorCompartments; }
92  const std::vector<SEGasCompartment*>& GetMechanicalVentilatorLeafCompartments() { return m_MechanicalVentilatorCompartments; }
93 
94  SELiquidCompartment& GetExtracellularFluid(SETissueCompartment& t) { return *m_ExtracellularFluid[&t]; }
95  SELiquidCompartment& GetIntracellularFluid(SETissueCompartment& t) { return *m_IntracellularFluid[&t]; }
96  const std::map<SETissueCompartment*, SELiquidCompartment*>& GetExtracellularFluid() { return m_ExtracellularFluid; }
97  const std::map<SETissueCompartment*, SELiquidCompartment*>& GetIntracellularFluid() { return m_IntracellularFluid; }
98 
99 protected:
100  // I don't want these exposed in BioGears, you should be calling the Substance manager
101  virtual void AddGasCompartmentSubstance(SESubstance& sub);
102  virtual void AddLiquidCompartmentSubstance(SESubstance& sub);
103 
104  virtual bool AllowGasSubstance(SESubstance& s, SEGasCompartment& cmpt) const;
105  virtual bool AllowLiquidSubstance(SESubstance& s, SELiquidCompartment& cmpt) const;
106 
108 
111 
116 
122 
125 
126  std::vector<SELiquidCompartment*> m_AerosolCompartments;
127  std::vector<SELiquidCompartment*> m_AerosolLeafCompartments;
128  std::vector<SELiquidCompartment*> m_ChymeCompartments;
129  std::vector<SELiquidCompartment*> m_ChymeLeafCompartments;
130  std::vector<SEGasCompartment*> m_PulmonaryCompartments;
131  std::vector<SEGasCompartment*> m_PulmonaryLeafCompartments;
132  std::vector<SEThermalCompartment*> m_TemperatureCompartments;
133  std::vector<SEThermalCompartment*> m_TemperatureLeafCompartments;
134  std::vector<SETissueCompartment*> m_TissueCompartments;
135  std::vector<SETissueCompartment*> m_TissueLeafCompartments;
136  std::vector<SELiquidCompartment*> m_UrineCompartments;
137  std::vector<SELiquidCompartment*> m_UrineLeafCompartments;
138  std::vector<SELiquidCompartment*> m_VascularCompartments;
139  std::vector<SELiquidCompartment*> m_VascularLeafCompartments;
140  std::vector<SEGasCompartment*> m_AnesthesiaMachineCompartments;
141  std::vector<SEGasCompartment*> m_AnesthesiaMachineLeafCompartments;
142  std::vector<SEGasCompartment*> m_InhalerCompartments;
143  std::vector<SEGasCompartment*> m_InhalerLeafCompartments;
144  std::vector<SELiquidCompartment*> m_InhalerAerosolCompartments;
145  std::vector<SELiquidCompartment*> m_InhalerAerosolLeafCompartments;
146  std::vector<SEGasCompartment*> m_MechanicalVentilatorCompartments;
147  std::vector<SEGasCompartment*> m_MechanicalVentilatorLeafCompartments;
148 
149  std::map<SETissueCompartment*, SELiquidCompartment*> m_ExtracellularFluid;
150  std::map<SETissueCompartment*, SELiquidCompartment*> m_IntracellularFluid;
151 };
152 }
const std::vector< SETissueCompartment * > & GetTissueLeafCompartments()
Definition: BioGearsCompartments.h:74
std::vector< SELiquidCompartment * > m_VascularLeafCompartments
Definition: BioGearsCompartments.h:139
std::vector< SELiquidCompartment * > m_UrineLeafCompartments
Definition: BioGearsCompartments.h:137
SEGasCompartmentGraph * m_AnesthesiaMachineGraph
Definition: BioGearsCompartments.h:121
const std::vector< SEGasCompartment * > & GetMechanicalVentilatorCompartments()
Definition: BioGearsCompartments.h:91
std::vector< SEGasCompartment * > m_PulmonaryLeafCompartments
Definition: BioGearsCompartments.h:131
const std::vector< SELiquidCompartment * > & GetChymeCompartments()
Definition: BioGearsCompartments.h:64
BioGears & m_data
Definition: BioGearsCompartments.h:107
Manages all compartments and graphs associated with all BioGears systems/equipement.
Definition: BioGearsCompartments.h:24
const std::vector< SELiquidCompartment * > & GetInhalerAerosolLeafCompartments()
Definition: BioGearsCompartments.h:89
std::vector< SEGasCompartment * > m_MechanicalVentilatorLeafCompartments
Definition: BioGearsCompartments.h:147
std::vector< SELiquidCompartment * > m_AerosolLeafCompartments
Definition: BioGearsCompartments.h:127
std::vector< SELiquidCompartment * > m_ChymeLeafCompartments
Definition: BioGearsCompartments.h:129
std::vector< SELiquidCompartment * > m_AerosolCompartments
Definition: BioGearsCompartments.h:126
Definition: SELiquidCompartmentGraph.h:24
const std::vector< SELiquidCompartment * > & GetChymeLeafCompartments()
Definition: BioGearsCompartments.h:65
const std::vector< SEThermalCompartment * > & GetTemperatureLeafCompartments()
Definition: BioGearsCompartments.h:71
std::vector< SELiquidCompartment * > m_InhalerAerosolCompartments
Definition: BioGearsCompartments.h:144
std::vector< SEGasCompartment * > m_MechanicalVentilatorCompartments
Definition: BioGearsCompartments.h:146
Definition: SECompartmentManager.h:32
std::map< SETissueCompartment *, SELiquidCompartment * > m_IntracellularFluid
Definition: BioGearsCompartments.h:150
SELiquidCompartment & GetIntracellularFluid(SETissueCompartment &t)
Definition: BioGearsCompartments.h:95
std::vector< SEThermalCompartment * > m_TemperatureLeafCompartments
Definition: BioGearsCompartments.h:133
const std::vector< SEGasCompartment * > & GetInhalerCompartments()
Definition: BioGearsCompartments.h:85
const std::map< SETissueCompartment *, SELiquidCompartment * > & GetIntracellularFluid()
Definition: BioGearsCompartments.h:97
SELiquidCompartment & GetExtracellularFluid(SETissueCompartment &t)
Definition: BioGearsCompartments.h:94
SELiquidCompartmentGraph * m_CardiovascularGraph
Definition: BioGearsCompartments.h:113
const std::vector< SEGasCompartment * > & GetMechanicalVentilatorLeafCompartments()
Definition: BioGearsCompartments.h:92
std::map< SETissueCompartment *, SELiquidCompartment * > m_ExtracellularFluid
Definition: BioGearsCompartments.h:149
Definition: SELiquidCompartment.h:27
std::vector< SELiquidCompartment * > m_InhalerAerosolLeafCompartments
Definition: BioGearsCompartments.h:145
const std::vector< SEGasCompartment * > & GetPulmonaryCompartments()
Definition: BioGearsCompartments.h:67
const std::vector< SEGasCompartment * > & GetAnesthesiaMachineCompartments()
Definition: BioGearsCompartments.h:82
std::vector< SELiquidCompartment * > m_ChymeCompartments
Definition: BioGearsCompartments.h:128
SEGasCompartmentGraph * m_CombinedRespiratoryMechanicalVentilatorGraph
Definition: BioGearsCompartments.h:120
const std::vector< SETissueCompartment * > & GetTissueCompartments()
Definition: BioGearsCompartments.h:73
SELiquidCompartmentGraph * m_CerebralGraph
Definition: BioGearsCompartments.h:114
const std::vector< SEGasCompartment * > & GetPulmonaryLeafCompartments()
Definition: BioGearsCompartments.h:68
SELiquidCompartmentGraph * m_CombinedAerosolInhalerGraph
Definition: BioGearsCompartments.h:124
void UpdateAirwayGraph()
Definition: BioGearsCompartments.h:37
std::vector< SEGasCompartment * > m_InhalerCompartments
Definition: BioGearsCompartments.h:142
std::vector< SEThermalCompartment * > m_TemperatureCompartments
Definition: BioGearsCompartments.h:132
SEGasCompartmentGraph * m_RespiratoryGraph
Definition: BioGearsCompartments.h:117
const std::vector< SEGasCompartment * > & GetInhalerLeafCompartments()
Definition: BioGearsCompartments.h:86
std::vector< SEGasCompartment * > m_PulmonaryCompartments
Definition: BioGearsCompartments.h:130
std::vector< SEGasCompartment * > m_AnesthesiaMachineCompartments
Definition: BioGearsCompartments.h:140
Definition: SESubstance.h:49
Definition: SEGasCompartmentGraph.h:25
SELiquidCompartmentGraph * m_CombinedCardiovascularGraph
Definition: BioGearsCompartments.h:112
std::vector< SEGasCompartment * > m_InhalerLeafCompartments
Definition: BioGearsCompartments.h:143
const std::vector< SELiquidCompartment * > & GetVascularLeafCompartments()
Definition: BioGearsCompartments.h:80
bool m_UpdateActiveAirwayGraph
Definition: BioGearsCompartments.h:109
SELiquidCompartmentGraph * m_RenalGraph
Definition: BioGearsCompartments.h:115
std::vector< SETissueCompartment * > m_TissueCompartments
Definition: BioGearsCompartments.h:134
std::vector< SELiquidCompartment * > m_VascularCompartments
Definition: BioGearsCompartments.h:138
const std::vector< SELiquidCompartment * > & GetVascularCompartments()
Definition: BioGearsCompartments.h:79
const std::vector< SELiquidCompartment * > & GetUrineCompartments()
Definition: BioGearsCompartments.h:76
const std::vector< SEGasCompartment * > & GetAnesthesiaMachineLeafCompartments()
Definition: BioGearsCompartments.h:83
const std::vector< SELiquidCompartment * > & GetAerosolCompartments()
Definition: BioGearsCompartments.h:61
std::vector< SETissueCompartment * > m_TissueLeafCompartments
Definition: BioGearsCompartments.h:135
const std::vector< SELiquidCompartment * > & GetAerosolLeafCompartments()
Definition: BioGearsCompartments.h:62
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
const std::vector< SELiquidCompartment * > & GetInhalerAerosolCompartments()
Definition: BioGearsCompartments.h:88
SEGasCompartmentGraph * m_CombinedRespiratoryAnesthesiaGraph
Definition: BioGearsCompartments.h:118
Class corresponding to the CompartmentManagerData schema type.
Definition: Compartment.hxx:5467
const std::map< SETissueCompartment *, SELiquidCompartment * > & GetExtracellularFluid()
Definition: BioGearsCompartments.h:96
Definition: SEElectricalCircuit.h:18
const std::vector< SELiquidCompartment * > & GetUrineLeafCompartments()
Definition: BioGearsCompartments.h:77
SELiquidCompartmentGraph * m_AerosolGraph
Definition: BioGearsCompartments.h:123
Definition: SETissueCompartment.h:32
std::vector< SEGasCompartment * > m_AnesthesiaMachineLeafCompartments
Definition: BioGearsCompartments.h:141
Definition: SECircuitManager.h:53
Manages and initializes all systems with substances needed by BioGears.
Definition: BioGearsSubstances.h:52
SEGasCompartmentGraph * m_CombinedRespiratoryInhalerGraph
Definition: BioGearsCompartments.h:119
const std::vector< SEThermalCompartment * > & GetTemperatureCompartments()
Definition: BioGearsCompartments.h:70
bool m_UpdateActiveAerosolGraph
Definition: BioGearsCompartments.h:110
std::vector< SELiquidCompartment * > m_UrineCompartments
Definition: BioGearsCompartments.h:136
Definition: SEGasCompartment.h:24