Nervous.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/cdm/system/physiology/SENervousSystem.h>
16 #include <biogears/engine/Controller/BioGearsSystem.h>
17 #include <biogears/exports.h>
18 #include <biogears/cdm/utils/RunningAverage.h>
19 #include <biogears/schema/biogears/BioGearsPhysiology.hxx>
20 
21 namespace biogears {
22 class SESubstance;
23 class SEPsychomotorVigilanceTask;
24 class BioGears;
25 class SEPatient;
30 class BIOGEARS_API Nervous : public SENervousSystem, public BioGearsSystem {
31  friend class BioGears;
32  friend class BioGearsEngineTest;
33 
34 protected:
35  static auto make_unique(BioGears& bg) -> std::unique_ptr<Nervous>;
36  Nervous(BioGears& bg);
38 
39 public:
40  virtual ~Nervous() override;
41 
42  static size_t TypeHash() { return reinterpret_cast<size_t>(&TypeHash); }
43  static constexpr char const* const TypeTag() { return "Nervous"; }
44  const char* classname() const override { return TypeTag(); }
45  size_t hash_code() const override { return TypeHash(); }
46 
47  void Clear() override;
48 
49  // Set members to a stable homeostatic state
50  void Initialize() override;
51 
52  // Load a state
53  virtual bool Load(const CDM::BioGearsNervousSystemData& in);
54  virtual CDM::BioGearsNervousSystemData* Unload() const override;
55 
56  //Assessments
57  SEScalar& CalculateCentralNervousSOFA();
58 
59 protected:
60  virtual void Unload(CDM::BioGearsNervousSystemData& data) const;
61 
62  // Set pointers and other member variables common to both homeostatic initialization and loading a state
63  void SetUp() override;
64 
65 public:
66  void AtSteadyState() override;
67  void PreProcess() override;
68  void Process() override;
69  void PostProcess() override;
70  bool CalculatePsychomotorVigilanceTask(SEPsychomotorVigilanceTask& pvt);
71 
72 
73 protected:
74  void BaroreceptorFeedback();
75  void CheckPainStimulus();
76  void CheckNervousStatus();
77  void ChemoreceptorFeedback();
78  void SetPupilEffects();
79  void CalculateSleepEffects();
80  void UpdateSleepState();
81  void AfferentResponse();
82  void CentralSignalProcess();
83  void EfferentResponse();
84  void LocalAutoregulation();
85 
86  // Serializable member variables (Set in Initialize and in schema)
132 
133 
134 
135  // Stateless member variable (Set in SetUp())
141  double m_dt_s;
148  double m_painVAS;
153 
154 };
155 }
SESubstance * m_Sarin
Definition: Nervous.h:143
Definition: SENervousSystem.h:25
double m_SympatheticSinoatrialSignalBaseline_Hz
Definition: Nervous.h:128
Definition: SEScalar.h:33
Definition: SEPsychomotorVigilanceTask.h:22
double m_PeripheralBloodGasInteractionBaseline_Hz
Definition: Nervous.h:120
double m_CarotidBaroreceptorStrain
Definition: Nervous.h:97
double m_AttentionLapses
Definition: Nervous.h:90
double m_SympatheticSinoatrialSignal_Hz
Definition: Nervous.h:150
double m_BaroreceptorOperatingPoint_mmHg
Definition: Nervous.h:93
double m_SympatheticPeripheralSignal_Hz
Definition: Nervous.h:151
double m_HeartElastanceModifier
Definition: Nervous.h:108
double m_SympatheticPeripheralSignalBaseline_Hz
Definition: Nervous.h:127
double m_CentralPressureDelta_cmH2O
Definition: Nervous.h:99
Definition: SEPatient.h:48
double m_HeartRateModifierSympathetic
Definition: Nervous.h:110
double m_VagalSignalBaseline_Hz
Definition: Nervous.h:131
double m_HypoxiaThresholdPeripheral
Definition: Nervous.h:115
double m_MeanLungVolume_L
Definition: Nervous.h:116
double m_ResistanceModifierSplanchnic
Definition: Nervous.h:126
double m_VagalSignal_Hz
Definition: Nervous.h:152
double m_ComplianceModifier
Definition: Nervous.h:107
double m_CerebralOxygenSaturationBaseline
Definition: Nervous.h:102
double m_HeartOxygenBaseline
Definition: Nervous.h:109
bool m_FeedbackActive
Definition: Nervous.h:140
double m_CerebralPerfusionPressureBaseline_mmHg
Definition: Nervous.h:103
std::vector< double > m_CerebralArteriesEffectors_Large
Definition: Nervous.h:100
double m_CentralFrequencyDelta_Per_min
Definition: Nervous.h:98
double m_HypercapniaThresholdHeart
Definition: Nervous.h:112
double m_MuscleOxygenBaseline
Definition: Nervous.h:117
double m_painStimulusDuration_s
Definition: Nervous.h:146
double m_AfferentBaroreceptorCarotid_Hz
Definition: Nervous.h:137
Definition: BioGearsEngineTest.h:24
double m_PeripheralPressureDelta_cmH2O
Definition: Nervous.h:122
Class corresponding to the BioGearsNervousSystemData schema type.
Definition: BioGearsPhysiology.hxx:4050
double m_TiredTime_hr
Definition: Nervous.h:130
static size_t TypeHash()
Definition: Nervous.h:42
SESubstance * m_Succinylcholine
Definition: Nervous.h:142
double m_painVAS
Definition: Nervous.h:148
double m_CardiopulmonaryInput_mmHg
Definition: Nervous.h:96
static constexpr char const *const TypeTag()
Definition: Nervous.h:43
SEPatient * m_Patient
Definition: Nervous.h:144
double m_dt_s
Definition: Nervous.h:141
Definition: SESubstance.h:49
The nervous class holds models of the peripheral and central nervous system. Currently, on the baroreceptor reflex is modeled.
Definition: Nervous.h:30
double m_painStimulus
Definition: Nervous.h:149
double m_AfferentCardiopulmonary_Hz
Definition: Nervous.h:138
double m_painVASDuration_s
Definition: Nervous.h:147
double m_AfferentChemoreceptor_Hz
Definition: Nervous.h:87
double m_ReactionTime_s
Definition: Nervous.h:123
double m_ArterialOxygenBaseline_mmHg
Definition: Nervous.h:91
double m_CerebralBloodFlowInput_mL_Per_s
Definition: Nervous.h:106
double m_ChemoreceptorFiringRateSetPoint_Hz
Definition: Nervous.h:104
double m_OxygenAutoregulatorHeart
Definition: Nervous.h:118
double m_ResistanceModifierExtrasplanchnic
Definition: Nervous.h:124
double m_SympatheticPeripheralSignalFatigue
Definition: Nervous.h:129
double m_AfferentPulmonaryStretchReceptor_Hz
Definition: Nervous.h:88
size_t hash_code() const override
Definition: Nervous.h:45
double m_AorticBaroreceptorStrain
Definition: Nervous.h:89
Manages and controls execution of all data/systems in BioGears.
Definition: BioGears.h:86
double m_OxygenAutoregulatorMuscle
Definition: Nervous.h:119
double m_CardiopulmonaryInputBaseline_mmHg
Definition: Nervous.h:95
double m_HypoxiaThresholdHeart
Definition: Nervous.h:114
double m_AfferentBaroreceptorAortic_Hz
Definition: Nervous.h:136
double m_ResistanceModifierMuscle
Definition: Nervous.h:125
double m_CerebralBloodFlowBaseline_mL_Per_s
Definition: Nervous.h:105
double m_PeripheralFrequencyDelta_Per_min
Definition: Nervous.h:121
Generic class for handling the BioGears stabilization methodology.
Definition: BioGearsSystem.h:23
Definition: SEElectricalCircuit.h:18
bool m_blockActive
Definition: Nervous.h:145
std::vector< double > m_CerebralArteriesEffectors_Small
Definition: Nervous.h:101
double m_DrugRespirationEffects
Definition: Nervous.h:139
double m_HypercapniaThresholdPeripheral
Definition: Nervous.h:113
double m_ArterialCarbonDioxideBaseline_mmHg
Definition: Nervous.h:92
const char * classname() const override
Definition: Nervous.h:44
double m_HeartRateModifierVagal
Definition: Nervous.h:111
double m_BiologicalDebt
Definition: Nervous.h:94
BioGears & m_data
Definition: Nervous.h:37