SESubstance.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 #include <biogears/cdm/CommonDataModel.h>
15 #include <biogears/exports.h>
16 
17 #include <biogears/schema/cdm/Substance.hxx>
18 
19 #include <biogears/cdm/substance/SESubstanceAerosolization.h>
20 #include <biogears/cdm/substance/SESubstanceClearance.h>
21 #include <biogears/cdm/substance/SESubstancePharmacodynamics.h>
22 #include <biogears/cdm/substance/SESubstancePharmacokinetics.h>
23 
24 CDM_BIND_DECL(SubstanceData)
25 
26 namespace biogears {
27 class SEScalarAmountPerVolume;
28 class AmountPerVolumeUnit;
29 class SEScalarMass;
30 class MassUnit;
31 class SEScalarMassPerAmount;
32 class MassPerAmountUnit;
33 class SEScalarVolumePerTimePressure;
34 class VolumePerTimePressureUnit;
35 class SEScalarInversePressure;
36 class InversePressureUnit;
37 class SEScalarMassPerAreaTime;
38 class MassPerAreaTimeUnit;
39 class SESubstancePharmacodynamics;
40 class SEScalarElectricResistance;
41 class ElectricResistanceUnit;
42 class SEScalarVolumePerTime;
43 class VolumePerTimeUnit;
44 class SEScalarPressure;
45 class PressureUnit;
46 class SEScalarTimeMassPerVolume;
47 class TimeMassPerVolumeUnit;
48 
49 class BIOGEARS_API SESubstance : public Loggable {
50 public:
51  SESubstance(Logger* logger);
52  virtual ~SESubstance();
53 
54  virtual void Clear();
55 
56  virtual const SEScalar* GetScalar(const char* name);
57  virtual const SEScalar* GetScalar(const std::string& name);
58 
59  virtual bool Load(const CDM::SubstanceData& in);
60  virtual CDM::SubstanceData* Unload() const;
61 
62 protected:
63  virtual void Unload(CDM::SubstanceData& data) const;
64 
65 public:
66  virtual std::string GetName() const;
67  virtual const char* GetName_cStr() const;
68  virtual void SetName(const char* name);
69  virtual void SetName(const std::string& name);
70  virtual bool HasName() const;
71  virtual void InvalidateName();
72 
73  virtual CDM::enumSubstanceState::value GetState() const;
74  virtual void SetState(CDM::enumSubstanceState::value state);
75  virtual bool HasState() const;
76  virtual void InvalidateState();
77 
78  virtual CDM::enumSubstanceClass::value GetClassification() const;
79  virtual void SetClassification(CDM::enumSubstanceClass::value subClass);
80  virtual bool HasClassification() const;
81  virtual void InvalidateClassification();
82 
83  virtual bool HasDensity() const;
84  virtual SEScalarMassPerVolume& GetDensity();
85  virtual double GetDensity(const MassPerVolumeUnit& unit) const;
86 
87  virtual bool HasMolarMass() const;
88  virtual SEScalarMassPerAmount& GetMolarMass();
89  virtual double GetMolarMass(const MassPerAmountUnit& unit) const;
90 
91  // Diffusion-ish
92  virtual bool HasMaximumDiffusionFlux() const;
93  virtual SEScalarMassPerAreaTime& GetMaximumDiffusionFlux();
94  virtual double GetMaximumDiffusionFlux(const MassPerAreaTimeUnit& unit) const;
95 
96  virtual bool HasMichaelisCoefficient() const;
97  virtual SEScalar& GetMichaelisCoefficient();
98  virtual double GetMichaelisCoefficient() const;
99 
100  virtual bool HasMembraneResistance() const;
101  virtual SEScalarElectricResistance& GetMembraneResistance();
102  virtual double GetMembraneResistance(const ElectricResistanceUnit& unit) const;
103 
104  // Liquid-ish
105  virtual bool HasAerosolization() const;
106  virtual SESubstanceAerosolization& GetAerosolization();
107  virtual const SESubstanceAerosolization* GetAerosolization() const;
108  virtual void RemoveAerosolization();
109 
110  virtual bool HasAreaUnderCurve() const;
111  virtual SEScalarTimeMassPerVolume& GetAreaUnderCurve();
112  virtual double GetAreaUnderCurve(const TimeMassPerVolumeUnit& unit) const;
113 
114  virtual bool HasBloodConcentration() const;
115  virtual SEScalarMassPerVolume& GetBloodConcentration();
116  virtual double GetBloodConcentration(const MassPerVolumeUnit& unit) const;
117 
118  virtual bool HasEffectSiteConcentration() const;
119  virtual SEScalarMassPerVolume& GetEffectSiteConcentration();
120  virtual double GetEffectSiteConcentration(const MassPerVolumeUnit& unit) const;
121 
122  virtual bool HasMassInBody() const;
123  virtual SEScalarMass& GetMassInBody();
124  virtual double GetMassInBody(const MassUnit& unit) const;
125 
126  virtual bool HasMassInBlood() const;
127  virtual SEScalarMass& GetMassInBlood();
128  virtual double GetMassInBlood(const MassUnit& unit) const;
129 
130  virtual bool HasMassInTissue() const;
131  virtual SEScalarMass& GetMassInTissue();
132  virtual double GetMassInTissue(const MassUnit& unit) const;
133 
134  virtual bool HasPlasmaConcentration() const;
135  virtual SEScalarMassPerVolume& GetPlasmaConcentration();
136  virtual double GetPlasmaConcentration(const MassPerVolumeUnit& unit) const;
137 
138  virtual bool HasSystemicMassCleared() const;
139  virtual SEScalarMass& GetSystemicMassCleared();
140  virtual double GetSystemicMassCleared(const MassUnit& unit) const;
141 
142  virtual bool HasTissueConcentration() const;
143  virtual SEScalarMassPerVolume& GetTissueConcentration();
144  virtual double GetTissueConcentration(const MassPerVolumeUnit& unit) const;
145 
146  // Gas-ish
147  virtual bool HasAlveolarTransfer() const;
148  virtual SEScalarVolumePerTime& GetAlveolarTransfer();
149  virtual double GetAlveolarTransfer(const VolumePerTimeUnit& unit) const;
150 
151  virtual bool HasDiffusingCapacity() const;
152  virtual SEScalarVolumePerTimePressure& GetDiffusingCapacity();
153  virtual double GetDiffusingCapacity(const VolumePerTimePressureUnit& unit) const;
154 
155  virtual bool HasEndTidalFraction() const;
156  virtual SEScalarFraction& GetEndTidalFraction();
157  virtual double GetEndTidalFraction() const;
158 
159  virtual bool HasEndTidalPressure() const;
160  virtual SEScalarPressure& GetEndTidalPressure();
161  virtual double GetEndTidalPressure(const PressureUnit& unit) const;
162 
163  virtual bool HasRelativeDiffusionCoefficient() const;
164  virtual SEScalar& GetRelativeDiffusionCoefficient();
165  virtual double GetRelativeDiffusionCoefficient() const;
166 
167  virtual bool HasSolubilityCoefficient() const;
168  virtual SEScalarInversePressure& GetSolubilityCoefficient();
169  virtual double GetSolubilityCoefficient(const InversePressureUnit& unit) const;
170 
171  virtual bool HasClearance() const;
172  virtual SESubstanceClearance& GetClearance();
173  virtual const SESubstanceClearance* GetClearance() const;
174  virtual void RemoveClearance();
175 
176  virtual bool HasPK() const;
177  virtual SESubstancePharmacokinetics& GetPK();
178  virtual const SESubstancePharmacokinetics* GetPK() const;
179  virtual void RemovePK();
180 
181  virtual bool HasPD() const;
182  virtual SESubstancePharmacodynamics& GetPD();
183  virtual const SESubstancePharmacodynamics* GetPD() const;
184  virtual void RemovePD();
185 
186 protected:
187  std::string m_Name;
192 
196 
207 
214 
218 };
219 }
Definition: SESubstancePharmacodynamics.h:30
Definition: SEScalarVolumePerTimePressure.h:18
SEScalarInversePressure * m_SolubilityCoefficient
Definition: SESubstance.h:213
Definition: SESubstanceAerosolization.h:24
SESubstanceAerosolization * m_Aerosolization
Definition: SESubstance.h:197
Definition: SEScalar.h:33
Definition: SEScalarElectricResistance.h:18
SEScalarMassPerVolume * m_TissueConcentration
Definition: SESubstance.h:206
Definition: SESubstancePharmacokinetics.h:24
Definition: SEScalarTimeMassPerVolume.h:18
Definition: SEScalarElectricResistance.h:33
SEScalarMassPerAmount * m_MolarMass
Definition: SESubstance.h:191
Definition: SEScalarMassPerAmount.h:43
Definition: SEScalarVolumePerTime.h:18
SEScalar * m_RelativeDiffusionCoefficient
Definition: SESubstance.h:212
value
Underlying enum type.
Definition: Substance.hxx:709
std::string m_Name
Definition: SESubstance.h:187
Definition: SEScalarMass.h:38
SESubstancePharmacodynamics * m_PD
Definition: SESubstance.h:217
Definition: Logger.h:27
Class corresponding to the SubstanceData schema type.
Definition: Substance.hxx:4432
SEScalarVolumePerTimePressure * m_DiffusingCapacity
Definition: SESubstance.h:209
value
Underlying enum type.
Definition: Substance.hxx:1328
Definition: Logger.h:75
SEScalarMassPerAreaTime * m_MaximumDiffusionFlux
Definition: SESubstance.h:193
Definition: SEScalarFraction.h:18
Definition: SEScalarTimeMassPerVolume.h:38
Definition: SEScalarMassPerAmount.h:18
SEScalarPressure * m_EndTidalPressure
Definition: SESubstance.h:211
Definition: SEScalarPressure.h:37
SEScalarMass * m_MassInTissue
Definition: SESubstance.h:203
SEScalarMass * m_SystemicMassCleared
Definition: SESubstance.h:205
Definition: SESubstance.h:49
SEScalarMass * m_MassInBlood
Definition: SESubstance.h:202
SESubstanceClearance * m_Clearance
Definition: SESubstance.h:215
SEScalar * m_MichaelisCoefficient
Definition: SESubstance.h:194
Definition: SEScalarVolumePerTime.h:40
Definition: SEScalarInversePressure.h:36
SEScalarFraction * m_EndTidalFraction
Definition: SESubstance.h:210
SEScalarElectricResistance * m_MembraneResistance
Definition: SESubstance.h:195
Definition: SEScalarPressure.h:18
Definition: SEScalarMassPerVolume.h:46
SEScalarVolumePerTime * m_AlveolarTransfer
Definition: SESubstance.h:208
SESubstancePharmacokinetics * m_PK
Definition: SESubstance.h:216
Definition: SEScalarMassPerVolume.h:18
CDM::enumSubstanceClass::value m_Classification
Definition: SESubstance.h:188
SEScalarTimeMassPerVolume * m_AreaUnderCurve
Definition: SESubstance.h:198
Definition: SEScalarVolumePerTimePressure.h:36
Definition: SEScalarMass.h:18
Definition: SEScalarMassPerAreaTime.h:18
Definition: SEElectricalCircuit.h:18
Definition: SEScalarMassPerAreaTime.h:33
CDM::enumSubstanceState::value m_State
Definition: SESubstance.h:189
SEScalarMassPerVolume * m_PlasmaConcentration
Definition: SESubstance.h:204
SEScalarMassPerVolume * m_BloodConcentration
Definition: SESubstance.h:199
Definition: SESubstanceClearance.h:35
Definition: SEScalarInversePressure.h:18
SEScalarMass * m_MassInBody
Definition: SESubstance.h:201
SEScalarMassPerVolume * m_EffectSiteConcentration
Definition: SESubstance.h:200
SEScalarMassPerVolume * m_Density
Definition: SESubstance.h:190