SEGastrointestinalSystem.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/patient/SENutrition.h>
15 #include <biogears/cdm/system/SESystem.h>
16 #include <biogears/schema/biogears/BioGearsPhysiology.hxx>
17 
18 namespace biogears {
19 class SEScalarVolumePerTime;
20 class SEScalarMass;
21 class MassUnit;
22 class VolumePerTimeUnit;
23 class SESubstance;
24 class SEDrugTransitState;
25 
26 class BIOGEARS_API SEGastrointestinalSystem : public SESystem {
27 public:
29  ~SEGastrointestinalSystem() override;
30 
31  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
32  static constexpr char const* const TypeTag() { return "SEGastrointestinalSystem"; }
33  const char* classname() const override { return TypeTag(); }
34  size_t hash_code() const override { return TypeHash(); }
35 
36  void Clear() override; // Deletes all members
37 
38  const SEScalar* GetScalar(const char* name) override;
39  const SEScalar* GetScalar(const std::string& name) override;
40 
41  bool HasChymeAbsorptionRate() const;
42  SEScalarVolumePerTime& GetChymeAbsorptionRate();
43  double GetChymeAbsorptionRate(const VolumePerTimeUnit& unit) const;
44 
45  bool HasStomachContents() const;
46  SENutrition& GetStomachContents();
47  const SENutrition* GetStomachContents() const;
48  void RemoveStomachContents();
49 
50  std::map<const SESubstance*, SEDrugTransitState*> GetDrugTransitStates();
51  SEDrugTransitState* GetDrugTransitState(const SESubstance* sub);
52  SEDrugTransitState* NewDrugTransitState(const SESubstance* sub);
53 
54  bool Load(const CDM::GastrointestinalSystemData& in);
55  CDM::GastrointestinalSystemData* Unload() const override;
56 
57  Tree<const char*> GetPhysiologyRequestGraph() const override;
58 
59 protected:
60  void Unload(CDM::GastrointestinalSystemData& data) const;
61 
62 protected:
65  std::map<const SESubstance*, SEDrugTransitState*> m_DrugTransitStates;
66 };
67 
68 class BIOGEARS_API SEDrugTransitState {
69 public:
70  SEDrugTransitState(const SESubstance& sub);
72 
73  virtual void Clear();
74 
75  virtual bool Load(const CDM::DrugTransitStateData& in);
76  virtual CDM::DrugTransitStateData* Unload() const;
77 
78  bool Initialize(SEScalarMass& dose, CDM::enumOralAdministration::value route);
79 
80  std::vector<double> GetLumenSolidMasses(const MassUnit& unit);
81  std::vector<double> GetLumenDissolvedMasses(const MassUnit& unit);
82  std::vector<double> GetEnterocyteMasses(const MassUnit& unit);
83  bool SetLumenSolidMasses(std::vector<double>& tsolid, const MassUnit& unit);
84  bool SetLumenDissolvedMasses(std::vector<double>& tdis, const MassUnit& unit);
85  bool SetEnterocyteMasses(std::vector<double>& esolid, const MassUnit& unit);
86  void IncrementStomachDissolvedMass(double value, const MassUnit& unit);
87  void IncrementStomachSolidMass(double value, const MassUnit& unit);
88  double GetTotalSolidMassInLumen(const MassUnit& unit);
89  double GetTotalDissolvedMassInLumen(const MassUnit& unit);
90  double GetTotalMassInEnterocytes(const MassUnit& unit);
91  SEScalarMass& GetTotalMassMetabolized();
92  SEScalarMass& GetTotalMassExcreted();
93 
94 protected:
95  virtual void Unload(CDM::DrugTransitStateData& data) const;
97  std::vector<SEScalarMass*> m_LumenSolidMasses;
98  std::vector<SEScalarMass*> m_LumenDissolvedMasses;
99  std::vector<SEScalarMass*> m_EnterocyteMasses;
103 };
104 }
const char * classname() const override
Definition: SEGastrointestinalSystem.h:33
std::vector< SEScalarMass * > m_LumenDissolvedMasses
Definition: SEGastrointestinalSystem.h:98
std::map< const SESubstance *, SEDrugTransitState * > m_DrugTransitStates
Definition: SEGastrointestinalSystem.h:65
const SESubstance * m_Substance
Definition: SEGastrointestinalSystem.h:96
Definition: SEScalar.h:33
static constexpr char const *const TypeTag()
Hopefully this returns a unique ID for every type.
Definition: SEGastrointestinalSystem.h:32
SENutrition * m_StomachContents
Definition: SEGastrointestinalSystem.h:64
value
Underlying enum type.
Definition: PatientActions.hxx:9602
Definition: SESystem.h:27
Definition: SEScalarVolumePerTime.h:18
Definition: SEScalarMass.h:38
Definition: Logger.h:75
SEScalarMass * m_TotalMassMetabolized
Definition: SEGastrointestinalSystem.h:100
Definition: SENutrition.h:29
Definition: SEGastrointestinalSystem.h:26
size_t m_NumTransitMasses
Definition: SEGastrointestinalSystem.h:102
Class corresponding to the DrugTransitStateData schema type.
Definition: Physiology.hxx:10859
Definition: SESubstance.h:49
Definition: SEGastrointestinalSystem.h:68
Definition: SEScalarVolumePerTime.h:40
std::vector< SEScalarMass * > m_EnterocyteMasses
Definition: SEGastrointestinalSystem.h:99
std::vector< SEScalarMass * > m_LumenSolidMasses
Definition: SEGastrointestinalSystem.h:97
Class corresponding to the GastrointestinalSystemData schema type.
Definition: Physiology.hxx:11346
Definition: SEScalarMass.h:18
size_t hash_code() const override
Definition: SEGastrointestinalSystem.h:34
Definition: SEElectricalCircuit.h:18
static size_t TypeHash()
Definition: SEGastrointestinalSystem.h:31
SEScalarMass * m_TotalMassExcreted
Definition: SEGastrointestinalSystem.h:101
SEScalarVolumePerTime * m_ChymeAbsorptionRate
Definition: SEGastrointestinalSystem.h:63