Drugs.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/cdm/properties/SEScalarTime.h>
18 #include <biogears/cdm/system/physiology/SEDrugSystem.h>
19 #include <biogears/engine/Controller/BioGearsSystem.h>
20 #include <biogears/schema/biogears/BioGearsPhysiology.hxx>
21 
22 
23 namespace biogears {
24 class SETissueCompartment;
25 class SEFluidCircuitPath;
26 class SETissueCompartment;
27 class SESubstance;
28 class SESubstanceBolusState;
29 class SENasalState;
30 class SETransmucosalState;
31 class SELiquidCompartment;
32 
33 class BioGears;
41 class BIOGEARS_API Drugs : public SEDrugSystem, public BioGearsSystem {
42  friend class BioGears;
43  friend class BioGearsEngineTest;
44 
45 protected:
46  static auto make_unique(BioGears& bg) -> std::unique_ptr<Drugs>;
47  Drugs(BioGears& bg);
49 
50 public:
51  virtual ~Drugs() override;
52 
53  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
54  static constexpr char const* const TypeTag() { return "Drugs"; }
55  const char* classname() const override { return TypeTag(); }
56  size_t hash_code() const override { return TypeHash(); }
57 
58  void Clear() override;
59 
60  // Set members to a stable homeostatic state
61  void Initialize() override;
62 
63  // Load a state
64  virtual bool Load(const CDM::BioGearsDrugSystemData& in);
65  virtual CDM::BioGearsDrugSystemData* Unload() const override;
66 
67 protected:
68  virtual void Unload(CDM::BioGearsDrugSystemData& data) const;
69 
70  // Set pointers and other member varialbes common to both homeostatic initialization and loading a state
71  void SetUp() override;
72 
73 public:
74  void AtSteadyState() override;
75  void PreProcess() override;
76  void Process() override;
77  void PostProcess() override {}
78 
79 protected:
80  void AdministerSubstanceBolus();
81  void AdministerSubstanceInfusion();
82  void AdministerSubstanceCompoundInfusion();
83  void AdministerSubstanceNasal();
84  void AdministerSubstanceOral();
85 
86  void CalculatePartitionCoefficients();
87  void CalculateSubstanceClearance();
88  void CalculatePlasmaSubstanceConcentration();
89  void CalculateDrugEffects();
90  void SarinKinetics();
91  double OralTransmucosalModel(const SESubstance* sub, SETransmucosalState* ot);
92 
93  // Serializable member variables (Set in Initialize and in schema)
94  std::map<const SESubstance*, SESubstanceBolusState*> m_BolusAdministrations;
95  std::map<const SESubstance*, SENasalState*> m_NasalStates;
96  std::map<const SESubstance*, SETransmucosalState*> m_TransmucosalStates;
99 
100  // Stateless member variable (Set in SetUp())
101  double m_dt_s;
103 
114 };
115 }
const char * classname() const override
Definition: Drugs.h:55
double m_dt_s
Definition: Drugs.h:101
std::map< const SESubstance *, SETransmucosalState * > m_TransmucosalStates
Definition: Drugs.h:96
static size_t TypeHash()
Definition: Drugs.h:53
Definition: SESubstanceOralDose.h:57
SELiquidCompartment * m_venaCavaVascular
Definition: Drugs.h:106
SELiquidCompartment * m_muscleIntracellular
Definition: Drugs.h:107
static constexpr char const *const TypeTag()
Hopefully this returns a unique ID for every type.
Definition: Drugs.h:54
SELiquidCompartment * m_liverVascular
Definition: Drugs.h:108
double m_RbcAcetylcholinesteraseFractionInhibited
Definition: Drugs.h:104
SESubstance * m_Sarin
Definition: Drugs.h:112
Definition: SEFluidCircuitPath.h:25
SEFluidCircuitPath * m_IVToVenaCava
Definition: Drugs.h:110
Definition: SELiquidCompartment.h:27
BioGears & m_data
Definition: Drugs.h:48
The drug system contains the physiologically based pharmacokinetic (PBPK) model and the pharmacodynam...
Definition: Drugs.h:41
size_t hash_code() const override
Definition: Drugs.h:56
void PostProcess() override
Definition: Drugs.h:77
Definition: BioGearsEngineTest.h:24
Definition: SESubstance.h:49
double m_totalAdministered_uL
Definition: Drugs.h:102
Class corresponding to the BioGearsDrugSystemData schema type.
Definition: BioGearsPhysiology.hxx:3122
Definition: SEDrugSystem.h:35
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
std::map< const SESubstance *, SENasalState * > m_NasalStates
Definition: Drugs.h:95
std::map< const SESubstance *, SESubstanceBolusState * > m_BolusAdministrations
Definition: Drugs.h:94
SELiquidCompartment * m_aortaVascular
Definition: Drugs.h:105
SETissueCompartment * m_fatTissue
Definition: Drugs.h:111
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
Definition: SEElectricalCircuit.h:18
SETissueCompartment * m_liverTissue
Definition: Drugs.h:109
Definition: SETissueCompartment.h:32
double m_AgedRbcAcetylcholinesterase_nM
Definition: Drugs.h:98
double m_SarinRbcAcetylcholinesteraseComplex_nM
Definition: Drugs.h:97
SESubstance * m_Pralidoxime
Definition: Drugs.h:113