Merge remote-tracking branch 'git/feature/advanced-organ-docs'
Build and Test / build (push) Has been cancelled
Build and Test / build (push) Has been cancelled
This commit is contained in:
@@ -61,3 +61,6 @@
|
|||||||
# Doxygen
|
# Doxygen
|
||||||
/docs/xml/
|
/docs/xml/
|
||||||
/docs/latex/
|
/docs/latex/
|
||||||
|
|
||||||
|
# Custom build output
|
||||||
|
/doc_build_test/
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ release = '1.0'
|
|||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
'breathe',
|
'breathe',
|
||||||
|
'sphinx.ext.graphviz',
|
||||||
]
|
]
|
||||||
|
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
|||||||
@@ -13,7 +13,80 @@ enum class MicturitionState {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Bladder, which stores urine.
|
* @brief Represents the Bladder, simulating the storage and expulsion of urine.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The urinary bladder is a muscular, hollow organ that sits in the pelvic floor. Its primary
|
||||||
|
* function is to collect and store urine produced by the kidneys. Urine enters the bladder
|
||||||
|
* via two tubes called ureters.
|
||||||
|
*
|
||||||
|
* The wall of the bladder contains a muscle called the detrusor muscle, which can relax to
|
||||||
|
* allow the bladder to stretch and fill, and contract to expel urine. The exit from the
|
||||||
|
* bladder is controlled by two sphincters. The process of urinating is called micturition.
|
||||||
|
* As the bladder fills, stretch receptors in its wall send signals to the brain, creating
|
||||||
|
* the urge to urinate.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Bladder` class models the fill-void cycle of the urinary bladder.
|
||||||
|
*
|
||||||
|
* @subsection state_model_sec State-Based Model
|
||||||
|
* The simulation is managed by the `MicturitionState` enum, which tracks the current phase:
|
||||||
|
* - `FILLING`: The bladder is passively collecting urine from the kidneys.
|
||||||
|
* - `FULL`: The bladder has reached a capacity where the urge to void is strong.
|
||||||
|
* - `VOIDING`: The bladder is contracting to expel urine.
|
||||||
|
*
|
||||||
|
* The `addUrine()` method allows the `Kidneys` model to add to the bladder's volume. The `update()`
|
||||||
|
* method simulates the increase in pressure as volume increases and handles the state transitions.
|
||||||
|
*
|
||||||
|
* @subsection micturition_state_sec Micturition Cycle Diagram
|
||||||
|
* This diagram shows the state transitions of the bladder as it fills and voids.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph MicturitionCycle {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* FILLING -> FULL [label="volume > threshold"];
|
||||||
|
* FULL -> VOIDING [label="voiding signal"];
|
||||||
|
* VOIDING -> FILLING [label="volume = 0"];
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to simulate urine being added to the bladder and observe
|
||||||
|
* the change in its state.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Bladder.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Bladder object
|
||||||
|
* Bladder bladder(1);
|
||||||
|
* std::cout << "Initial State: " << bladder.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Add urine from the kidneys over time
|
||||||
|
* std::cout << "\nKidneys are producing urine..." << std::endl;
|
||||||
|
* for (int i = 0; i < 300; ++i) {
|
||||||
|
* bladder.addUrine(1.0); // Add 1mL of urine
|
||||||
|
* bladder.update(patient, 1.0);
|
||||||
|
* }
|
||||||
|
* std::cout << "State after adding 300mL: " << bladder.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Add more urine to reach the 'FULL' state
|
||||||
|
* for (int i = 0; i < 200; ++i) {
|
||||||
|
* bladder.addUrine(1.0);
|
||||||
|
* bladder.update(patient, 1.0);
|
||||||
|
* }
|
||||||
|
* std::cout << "State after adding another 200mL: " << bladder.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Bladder : public Organ {
|
class MEDICAL_LIB_API Bladder : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -16,7 +16,105 @@ struct BrainRegion {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Brain organ with a more detailed physiological model.
|
* @brief Represents the Brain organ, simulating neurological vitals and activity.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The brain is the command center of the nervous system, controlling thought, memory, emotion,
|
||||||
|
* touch, motor skills, vision, breathing, temperature, hunger, and every process that regulates
|
||||||
|
* our body. It is a complex organ composed of several distinct regions, each with specialized
|
||||||
|
- * functions.
|
||||||
|
+ * functions. The major parts include:
|
||||||
|
* - **Frontal Lobe**: Associated with reasoning, planning, parts of speech, movement, emotions, and problem-solving.
|
||||||
|
* - **Parietal Lobe**: Manages perception of stimuli related to touch, pressure, temperature, and pain.
|
||||||
|
* - **Temporal Lobe**: Involved in perception and recognition of auditory stimuli, memory, and speech.
|
||||||
|
* - **Occipital Lobe**: Primarily responsible for vision.
|
||||||
|
* - **Cerebellum**: Crucial for coordinating voluntary movements, posture, balance, and speech.
|
||||||
|
*
|
||||||
|
* Maintaining adequate blood flow is critical for brain health. Two key metrics are:
|
||||||
|
* - **Intracranial Pressure (ICP)**: The pressure inside the skull.
|
||||||
|
* - **Cerebral Perfusion Pressure (CPP)**: The net pressure gradient causing blood flow to the brain.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Brain` class models the brain's high-level physiological state and its influence on
|
||||||
|
* the body's autonomic systems.
|
||||||
|
*
|
||||||
|
* @subsection neuro_vitals_sec Neurological Vitals
|
||||||
|
* The simulation tracks several key neurological vitals:
|
||||||
|
* - **Glasgow Coma Scale (GCS)**: A simplified score representing the level of consciousness,
|
||||||
|
* accessible via `getGCS()`.
|
||||||
|
* - **Intracranial Pressure (ICP)**: A simulated pressure within the skull, retrieved with
|
||||||
|
* `getIntracranialPressure()`.
|
||||||
|
* - **Cerebral Perfusion Pressure (CPP)**: Calculated based on ICP and Mean Arterial Pressure,
|
||||||
|
* available through `getCerebralPerfusionPressure()`.
|
||||||
|
* - **EEG Waveform**: The class generates a simplified electroencephalogram (EEG) waveform,
|
||||||
|
* which can be accessed with `getEegWaveform()`.
|
||||||
|
*
|
||||||
|
* @subsection region_model_sec Regional Activity Model
|
||||||
|
* The major lobes and the cerebellum are modeled as `BrainRegion` structs, each with its own
|
||||||
|
* metabolic activity level and blood flow. The `update()` method adjusts these values over time.
|
||||||
|
*
|
||||||
|
* @subsection brain_diagram_sec Brain Regions Diagram
|
||||||
|
* This diagram shows the major brain regions simulated by this class.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph BrainRegions {
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Brain [label="Brain", shape=ellipse];
|
||||||
|
*
|
||||||
|
* subgraph cluster_Cerebrum {
|
||||||
|
* label="Cerebrum (Lobes)";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightblue;
|
||||||
|
* Frontal [label="Frontal Lobe"];
|
||||||
|
* Parietal [label="Parietal Lobe"];
|
||||||
|
* Temporal [label="Temporal Lobe"];
|
||||||
|
* Occipital [label="Occipital Lobe"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Cerebellum [label="Cerebellum", style=filled, color=lightpink];
|
||||||
|
*
|
||||||
|
* Brain -> Frontal;
|
||||||
|
* Brain -> Parietal;
|
||||||
|
* Brain -> Temporal;
|
||||||
|
* Brain -> Occipital;
|
||||||
|
* Brain -> Cerebellum;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to create a `Brain` instance and monitor its state.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Brain.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Brain object
|
||||||
|
* Brain brain(1);
|
||||||
|
*
|
||||||
|
* // Simulate for 5 seconds
|
||||||
|
* std::cout << "Simulating Brain for 5 seconds..." << std::endl;
|
||||||
|
* for (int i = 0; i < 5; ++i) {
|
||||||
|
* // In a real simulation, the patient's heart would update the MAP
|
||||||
|
* patient.setVital("MeanArterialPressure", 85.0); // Example MAP
|
||||||
|
* brain.update(patient, 1.0); // Update by 1.0 second
|
||||||
|
* std::cout << "Time: " << i + 1 << "s, " << brain.getSummary() << std::endl;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Retrieve specific final vitals
|
||||||
|
* std::cout << "\n--- Simulation Results ---" << std::endl;
|
||||||
|
* std::cout << "Final GCS: " << brain.getGCS() << std::endl;
|
||||||
|
* std::cout << "Final ICP: " << brain.getIntracranialPressure() << " mmHg" << std::endl;
|
||||||
|
* std::cout << "Final CPP: " << brain.getCerebralPerfusionPressure() << " mmHg" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Brain : public Organ {
|
class MEDICAL_LIB_API Brain : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -22,7 +22,81 @@ struct Bolus {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Esophagus with a more detailed physiological model.
|
* @brief Represents the Esophagus, simulating the transport of food via peristalsis.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The esophagus is a muscular tube that connects the pharynx (throat) to the stomach. Its sole
|
||||||
|
* function in the digestive system is to transport food and liquid from the mouth to the stomach.
|
||||||
|
*
|
||||||
|
* This transport is achieved through a process called **peristalsis**, which is a series of
|
||||||
|
* wave-like muscle contractions that move food along the digestive tract. When a person swallows,
|
||||||
|
* the esophagus muscles contract behind the chewed food (bolus) and relax in front of it, pushing
|
||||||
|
* it downward. At the bottom, the lower esophageal sphincter (LES) relaxes to allow the food to
|
||||||
|
* enter the stomach and then closes to prevent stomach contents from flowing back up.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Esophagus` class models the process of swallowing and peristalsis.
|
||||||
|
*
|
||||||
|
* @subsection state_model_sec State-Based Model
|
||||||
|
* The simulation is managed by the `PeristalsisState` enum, which tracks the current muscle activity:
|
||||||
|
* - `IDLE`: No swallowing is in progress.
|
||||||
|
* - `CONTRACTING`: The muscle is actively contracting to push a bolus.
|
||||||
|
* - `RELAXING`: The muscle is relaxing after a contraction.
|
||||||
|
*
|
||||||
|
* A mass of food is represented by the `Bolus` struct. The process begins when `initiateSwallow()`
|
||||||
|
* is called, which creates a new bolus. The `update()` method then simulates the movement of this
|
||||||
|
* bolus down the esophagus's length until it is delivered to the stomach.
|
||||||
|
*
|
||||||
|
* @subsection peristalsis_flow_sec Peristalsis Flow Diagram
|
||||||
|
* This diagram shows the journey of a food bolus from the throat to the stomach.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph PeristalsisFlow {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Pharynx [label="Pharynx (Throat)"];
|
||||||
|
* Esophagus [label="Esophagus\n(Peristaltic Wave)"];
|
||||||
|
* Stomach [label="Stomach"];
|
||||||
|
*
|
||||||
|
* Pharynx -> Esophagus [label="swallow()"];
|
||||||
|
* Esophagus -> Stomach [label="LES opens"];
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to simulate swallowing a bolus of food.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Esophagus.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create an Esophagus object
|
||||||
|
* Esophagus esophagus(1);
|
||||||
|
* std::cout << "Initial State: " << esophagus.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Initiate a swallow
|
||||||
|
* std::cout << "\nSwallowing a 15mL bolus..." << std::endl;
|
||||||
|
* esophagus.initiateSwallow(15.0);
|
||||||
|
*
|
||||||
|
* // Simulate the bolus moving down the esophagus
|
||||||
|
* for (int i = 0; i < 10; ++i) {
|
||||||
|
* esophagus.update(patient, 1.0); // Simulate 1 second
|
||||||
|
* std::cout << "Time: " << i + 1 << "s, " << esophagus.getSummary() << std::endl;
|
||||||
|
* if (!esophagus.isSwallowing()) {
|
||||||
|
* std::cout << "Bolus has reached the stomach." << std::endl;
|
||||||
|
* break;
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Esophagus : public Organ {
|
class MEDICAL_LIB_API Esophagus : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -12,7 +12,80 @@ enum class GallbladderState {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Gallbladder, which stores and concentrates bile.
|
* @brief Represents the Gallbladder, which stores, concentrates, and releases bile.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The gallbladder is a small, pear-shaped organ located beneath the liver. Its main purpose is
|
||||||
|
* to store and concentrate bile, a digestive fluid produced by the liver. Bile is essential
|
||||||
|
* for the digestion of fats.
|
||||||
|
*
|
||||||
|
* After being produced by the liver, bile travels to the gallbladder where it is stored. The
|
||||||
|
* gallbladder lining absorbs water from the bile, making it more concentrated. When fatty food
|
||||||
|
* enters the small intestine, a hormone called cholecystokinin (CCK) is released, signaling the
|
||||||
|
* gallbladder to contract and release the concentrated bile into the duodenum (the first part
|
||||||
|
* of the small intestine).
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Gallbladder` class models the storage and release cycle of bile.
|
||||||
|
*
|
||||||
|
* @subsection state_model_sec State-Based Model
|
||||||
|
* The simulation is managed by the `GallbladderState` enum, which has two states:
|
||||||
|
* - `STORING`: The default state, where the gallbladder is passively filling with bile from the liver.
|
||||||
|
* - `CONTRACTING`: Triggered by a simulated signal (e.g., presence of fats), causing the
|
||||||
|
* gallbladder to release bile.
|
||||||
|
*
|
||||||
|
* The `storeBile()` method is used to add bile from the liver, and `releaseBile()` simulates the
|
||||||
|
* contraction, returning the volume of bile ejected. The model also tracks the `bileConcentrationFactor`.
|
||||||
|
*
|
||||||
|
* @subsection bile_flow_sec Bile Flow Diagram
|
||||||
|
* This diagram shows the flow of bile from the liver to the gallbladder and then to the intestine.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph BileFlow {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Liver [label="Liver\n(Produces Bile)"];
|
||||||
|
* Gallbladder [label="Gallbladder\n(Stores & Concentrates Bile)"];
|
||||||
|
* Intestine [label="Small Intestine\n(Duodenum)"];
|
||||||
|
*
|
||||||
|
* Liver -> Gallbladder [label=" stores"];
|
||||||
|
* Gallbladder -> Intestine [label=" releases upon signal"];
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to simulate the gallbladder storing and then releasing bile.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Gallbladder.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Gallbladder object
|
||||||
|
* Gallbladder gallbladder(1);
|
||||||
|
* std::cout << "Initial State: " << gallbladder.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Store some bile from the liver
|
||||||
|
* std::cout << "\nStoring 10mL of bile..." << std::endl;
|
||||||
|
* gallbladder.storeBile(10.0);
|
||||||
|
* std::cout << "State after storing: " << gallbladder.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Simulate the gallbladder contracting and releasing bile
|
||||||
|
* std::cout << "\nFood detected! Releasing bile..." << std::endl;
|
||||||
|
* // In a full simulation, the update() method would trigger the state change.
|
||||||
|
* // We'll call releaseBile() directly for this example.
|
||||||
|
* double released = gallbladder.releaseBile(5.0); // Simulate 5s of release
|
||||||
|
* std::cout << "Released " << released << " mL of bile." << std::endl;
|
||||||
|
* std::cout << "Final State: " << gallbladder.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Gallbladder : public Organ {
|
class MEDICAL_LIB_API Gallbladder : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -40,6 +40,113 @@ struct Chamber {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Heart organ, with detailed mechanical and electrical simulation.
|
* @brief Represents the Heart organ, with detailed mechanical and electrical simulation.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The heart is a muscular organ responsible for pumping blood throughout the circulatory system.
|
||||||
|
* It is divided into four chambers: two upper atria and two lower ventricles. The right side
|
||||||
|
* of the heart handles deoxygenated blood, while the left side handles oxygenated blood.
|
||||||
|
*
|
||||||
|
* - **Deoxygenated blood** from the body enters the **Right Atrium**.
|
||||||
|
* - It is pumped to the **Right Ventricle** through the **Tricuspid Valve**.
|
||||||
|
* - The Right Ventricle pumps the blood to the lungs through the **Pulmonary Valve**.
|
||||||
|
* - **Oxygenated blood** from the lungs enters the **Left Atrium**.
|
||||||
|
* - It is pumped to the **Left Ventricle** through the **Mitral Valve**.
|
||||||
|
* - The Left Ventricle pumps the oxygenated blood to the rest of the body through the **Aortic Valve**.
|
||||||
|
*
|
||||||
|
* This entire sequence is known as the cardiac cycle, which involves two main phases:
|
||||||
|
* 1. **Diastole**: The relaxation phase, where chambers fill with blood.
|
||||||
|
* 2. **Systole**: The contraction phase, where chambers pump blood out.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Heart` class provides a detailed simulation of both the mechanical and electrical functions
|
||||||
|
* of the human heart.
|
||||||
|
*
|
||||||
|
* @subsection mech_model_sec Mechanical Model
|
||||||
|
* The four chambers and four primary valves are modeled using the `Chamber` and `Valve` structs.
|
||||||
|
* The `update()` function drives the simulation forward in time, calculating changes in chamber
|
||||||
|
* volume and pressure based on the current phase of the cardiac cycle (systole or diastole).
|
||||||
|
* Key outputs of the mechanical simulation include:
|
||||||
|
* - **Ejection Fraction**: The percentage of blood pumped out of the left ventricle with each beat.
|
||||||
|
* Calculated by `getEjectionFraction()`.
|
||||||
|
* - **Aortic Pressure**: Represents the systemic blood pressure. Retrieved with `getAorticPressure()`.
|
||||||
|
*
|
||||||
|
* @subsection elec_model_sec Electrical Model
|
||||||
|
* The class also simulates the heart's electrical activity, which is observable via an
|
||||||
|
* electrocardiogram (EKG). The `simulateEkgWaveform()` function generates a realistic EKG signal
|
||||||
|
* based on the cardiac cycle's timing. The number of EKG leads can be configured in the constructor.
|
||||||
|
* The generated data can be accessed using `getEkgData()`.
|
||||||
|
*
|
||||||
|
* @subsection a_graph_sec Blood Flow Diagram
|
||||||
|
* The following diagram illustrates the path of blood through the heart's chambers and valves.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph BloodFlow {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* subgraph cluster_Deoxygenated {
|
||||||
|
* label="Deoxygenated Blood (Pulmonary Circuit)";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightblue;
|
||||||
|
* Body [label="Vena Cava\n(from Body)"];
|
||||||
|
* RA [label="Right Atrium"];
|
||||||
|
* RV [label="Right Ventricle"];
|
||||||
|
* Lungs_In [label="Pulmonary Artery\n(to Lungs)"];
|
||||||
|
* Body -> RA [label=" Enters"];
|
||||||
|
* RA -> RV [label=" Tricuspid Valve"];
|
||||||
|
* RV -> Lungs_In [label=" Pulmonary Valve"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* subgraph cluster_Oxygenated {
|
||||||
|
* label="Oxygenated Blood (Systemic Circuit)";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightpink;
|
||||||
|
* Lungs_Out [label="Pulmonary Vein\n(from Lungs)"];
|
||||||
|
* LA [label="Left Atrium"];
|
||||||
|
* LV [label="Left Ventricle"];
|
||||||
|
* Aorta [label="Aorta\n(to Body)"];
|
||||||
|
* Lungs_Out -> LA [label=" Enters"];
|
||||||
|
* LA -> LV [label=" Mitral Valve"];
|
||||||
|
* LV -> Aorta [label=" Aortic Valve"];
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* Here is a simple example of how to create a `Heart` object, simulate it over time,
|
||||||
|
* and retrieve data.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Heart.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Heart with 12 EKG leads
|
||||||
|
* Heart heart(1, 12);
|
||||||
|
*
|
||||||
|
* // Set a baseline heart rate
|
||||||
|
* heart.setHeartRate(75.0);
|
||||||
|
*
|
||||||
|
* // Simulate the heart for 5 seconds
|
||||||
|
* std::cout << "Simulating Heart for 5 seconds..." << std::endl;
|
||||||
|
* for (int i = 0; i < 5; ++i) {
|
||||||
|
* heart.update(patient, 1.0); // Update by 1.0 second
|
||||||
|
* std::cout << "Time: " << i + 1 << "s, " << heart.getSummary() << std::endl;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Retrieve specific metrics from the simulation
|
||||||
|
* std::cout << "\n--- Simulation Results ---" << std::endl;
|
||||||
|
* std::cout << "Final Measured Heart Rate: " << heart.getHeartRate() << " bpm" << std::endl;
|
||||||
|
* std::cout << "Final Ejection Fraction: " << heart.getEjectionFraction() << "%" << std::endl;
|
||||||
|
* std::cout << "Final Aortic Pressure: " << heart.getAorticPressure() << " mmHg" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Heart : public Organ {
|
class MEDICAL_LIB_API Heart : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -19,7 +19,96 @@ struct IntestinalSegment {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Intestines (Small and Large) with a more detailed model.
|
* @brief Represents the Intestines (Small and Large), simulating final digestion and absorption.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The intestines are a crucial part of the digestive tract where most of the absorption of
|
||||||
|
* nutrients and water happens. They are divided into two main parts:
|
||||||
|
*
|
||||||
|
* - **Small Intestine**: A long, coiled tube where the majority of digestion and nutrient
|
||||||
|
* absorption takes place. It receives chyme from the stomach, along with bile from the
|
||||||
|
* gallbladder and digestive enzymes from the pancreas. It has three segments:
|
||||||
|
* 1. **Duodenum**: The first section, where chyme is mixed with bile and enzymes.
|
||||||
|
* 2. **Jejunum**: The middle section, where most nutrient absorption occurs.
|
||||||
|
* 3. **Ileum**: The final section, which absorbs any remaining nutrients.
|
||||||
|
*
|
||||||
|
* - **Large Intestine (Colon)**: A shorter, wider tube that absorbs water and electrolytes from
|
||||||
|
* the remaining indigestible food matter and then passes useless waste material from the body.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Intestines` class models the passage of chyme through the various intestinal segments.
|
||||||
|
*
|
||||||
|
* @subsection segment_model_sec Segment-Based Model
|
||||||
|
* The small and large intestines are modeled as a series of `IntestinalSegment` structs, each
|
||||||
|
* with its own properties for motility and absorption rates. The `update()` method simulates
|
||||||
|
* the movement and processing of chyme through these segments over time.
|
||||||
|
*
|
||||||
|
* @subsection interaction_sec Interaction with Other Organs
|
||||||
|
* The model is designed to work with other digestive organs:
|
||||||
|
* - `receiveChyme()`: Takes the output from the Stomach.
|
||||||
|
* - `receiveBile()`: Takes bile from the Gallbladder to aid in fat digestion.
|
||||||
|
* - `receiveEnzymes()`: Takes enzymes from the Pancreas to break down macromolecules.
|
||||||
|
*
|
||||||
|
* @subsection intestines_flow_sec Digestive Flow Diagram
|
||||||
|
* The following diagram shows the path of chyme as it enters from the stomach and moves
|
||||||
|
* through the different segments of the intestines.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph IntestinesFlow {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Stomach [label="Stomach"];
|
||||||
|
* Duodenum [label="Duodenum"];
|
||||||
|
* Jejunum [label="Jejunum"];
|
||||||
|
* Ileum [label="Ileum"];
|
||||||
|
* Colon [label="Colon (Large Intestine)"];
|
||||||
|
* Waste [label="Waste Exit"];
|
||||||
|
*
|
||||||
|
* Pancreas [shape=ellipse, style=filled, color=lightgrey];
|
||||||
|
* Gallbladder [shape=ellipse, style=filled, color=lightgrey];
|
||||||
|
*
|
||||||
|
* Stomach -> Duodenum [label="Chyme"];
|
||||||
|
* Pancreas -> Duodenum [label="Enzymes"];
|
||||||
|
* Gallbladder -> Duodenum [label="Bile"];
|
||||||
|
* Duodenum -> Jejunum;
|
||||||
|
* Jejunum -> Ileum;
|
||||||
|
* Ileum -> Colon;
|
||||||
|
* Colon -> Waste;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to simulate the intestines receiving chyme from the stomach.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Intestines.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create an Intestines object
|
||||||
|
* Intestines intestines(1);
|
||||||
|
* std::cout << "Initial State: " << intestines.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Receive chyme from the stomach
|
||||||
|
* std::cout << "\nReceiving 200mL of chyme..." << std::endl;
|
||||||
|
* intestines.receiveChyme(200.0);
|
||||||
|
* std::cout << "State after receiving chyme: " << intestines.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Simulate digestion and absorption over time
|
||||||
|
* std::cout << "\nSimulating for 1 hour..." << std::endl;
|
||||||
|
* for (int i = 0; i < 60; ++i) {
|
||||||
|
* intestines.update(patient, 60.0); // Simulate 1 minute
|
||||||
|
* }
|
||||||
|
* std::cout << "State after 1 hour: " << intestines.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Intestines : public Organ {
|
class MEDICAL_LIB_API Intestines : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -14,7 +14,91 @@ struct Nephron {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Kidneys, responsible for filtering blood and producing urine.
|
* @brief Represents the Kidneys, simulating blood filtration, urine production, and electrolyte balance.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The kidneys are a pair of bean-shaped organs that perform several vital functions. Their primary
|
||||||
|
* role is to filter waste products, excess water, and other impurities from the blood. These
|
||||||
|
* waste products are converted into urine, which flows to the bladder to be excreted.
|
||||||
|
*
|
||||||
|
* Each kidney contains millions of tiny filtering units called **nephrons**. Blood enters the
|
||||||
|
* nephron, where waste is filtered out and essential substances are reabsorbed back into the blood.
|
||||||
|
*
|
||||||
|
* Key functions of the kidneys include:
|
||||||
|
* - **Waste Excretion**: Filtering out urea, creatinine, and other metabolic wastes.
|
||||||
|
* - **Electrolyte Balance**: Regulating the levels of sodium, potassium, and other electrolytes.
|
||||||
|
* - **Blood Pressure Regulation**: Producing the enzyme renin, which plays a key role in the
|
||||||
|
* renin-angiotensin-aldosterone system that controls blood pressure.
|
||||||
|
* - **Acid-Base Balance**: Maintaining the pH of the blood within a narrow range.
|
||||||
|
*
|
||||||
|
* The **Glomerular Filtration Rate (GFR)** is a key measure of kidney function, representing the
|
||||||
|
* volume of fluid filtered from the blood per unit time.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Kidneys` class models the filtration and regulatory functions of the kidneys.
|
||||||
|
*
|
||||||
|
* @subsection func_model_sec Functional Model
|
||||||
|
* The kidney's filtering capacity is represented by a vector of `Nephron` structs. Each nephron
|
||||||
|
* has a specific `filtrationEfficiency`. The `update()` method simulates the ongoing process of
|
||||||
|
* blood filtration, calculating urine output and changes in blood chemistry.
|
||||||
|
*
|
||||||
|
* @subsection vitals_sec Simulated Renal Vitals
|
||||||
|
* The simulation tracks several key indicators of renal function:
|
||||||
|
* - **GFR**: The Glomerular Filtration Rate, a primary indicator of kidney health, accessible via `getGfr()`.
|
||||||
|
* - **Urine Output**: The rate of urine production, retrieved with `getUrineOutputRate()`.
|
||||||
|
* - **Electrolytes**: Simulated levels of blood sodium (`getBloodSodium()`) and potassium (`getBloodPotassium()`).
|
||||||
|
* - **Renin**: The secretion rate of renin, a key hormone for blood pressure control, available
|
||||||
|
* through `getReninSecretionRate()`.
|
||||||
|
*
|
||||||
|
* @subsection kidney_flow_sec Kidney Filtration Flow
|
||||||
|
* The following diagram illustrates the high-level flow of blood through the kidneys for filtration.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph KidneyFlow {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=record, style=rounded];
|
||||||
|
*
|
||||||
|
* BloodIn [label="Renal Artery\n(Unfiltered Blood)"];
|
||||||
|
* Kidney [label="{<n>Nephrons|Glomerular Filtration}"];
|
||||||
|
* BloodOut [label="Renal Vein\n(Filtered Blood)"];
|
||||||
|
* UrineOut [label="Ureter\n(Urine to Bladder)"];
|
||||||
|
*
|
||||||
|
* BloodIn -> Kidney:n;
|
||||||
|
* Kidney -> BloodOut;
|
||||||
|
* Kidney -> UrineOut;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to create a `Kidneys` object and monitor its function.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Kidneys.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Kidneys object
|
||||||
|
* Kidneys kidneys(1);
|
||||||
|
*
|
||||||
|
* // Simulate for a short period
|
||||||
|
* std::cout << "Simulating Kidneys function for 1 minute..." << std::endl;
|
||||||
|
* kidneys.update(patient, 60.0); // Simulate 60 seconds of activity
|
||||||
|
* std::cout << kidneys.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Retrieve specific final vitals
|
||||||
|
* std::cout << "\n--- Renal Function Panel ---" << std::endl;
|
||||||
|
* std::cout << "GFR: " << kidneys.getGfr() << " mL/min" << std::endl;
|
||||||
|
* std::cout << "Urine Output Rate: " << kidneys.getUrineOutputRate() << " mL/s" << std::endl;
|
||||||
|
* std::cout << "Blood Sodium: " << kidneys.getBloodSodium() << " mEq/L" << std::endl;
|
||||||
|
* std::cout << "Blood Potassium: " << kidneys.getBloodPotassium() << " mEq/L" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Kidneys : public Organ {
|
class MEDICAL_LIB_API Kidneys : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -14,7 +14,89 @@ struct HepaticLobule {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Liver organ with a more detailed physiological model.
|
* @brief Represents the Liver organ, simulating metabolic and detoxification functions.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The liver is a large, essential organ located in the upper right quadrant of the abdomen. It
|
||||||
|
* performs a vast number of critical functions, including:
|
||||||
|
* - **Metabolism**: It metabolizes carbohydrates, fats, and proteins. It plays a central role in
|
||||||
|
* maintaining blood glucose levels, for example through gluconeogenesis (creating glucose).
|
||||||
|
* - **Detoxification**: It filters the blood to remove toxins, drugs, and metabolic byproducts
|
||||||
|
* like bilirubin.
|
||||||
|
* - **Synthesis**: It produces essential proteins, such as albumin and clotting factors. It also
|
||||||
|
* produces angiotensinogen, a key hormone in blood pressure regulation.
|
||||||
|
* - **Bile Production**: It produces bile, a fluid that is stored in the gallbladder and is
|
||||||
|
* essential for the digestion of fats in the small intestine.
|
||||||
|
*
|
||||||
|
* Liver health is often assessed by measuring the levels of liver enzymes (like ALT and AST) and
|
||||||
|
* bilirubin in the blood. Elevated levels can indicate liver damage or disease.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Liver` class models the liver's key metabolic and synthetic functions.
|
||||||
|
*
|
||||||
|
* @subsection func_model_sec Functional Model
|
||||||
|
* The liver's vast processing capacity is represented by a collection of `HepaticLobule` structs,
|
||||||
|
* which are the functional units of the organ. The `update()` method simulates ongoing metabolic
|
||||||
|
* activity, calculating the production rates of various substances.
|
||||||
|
*
|
||||||
|
* @subsection vitals_sec Simulated Vitals and Outputs
|
||||||
|
* The simulation tracks several key indicators of liver function:
|
||||||
|
* - **Bile Production**: The rate at which bile is produced, accessible via `getBileProductionRate()`.
|
||||||
|
* - **Glucose Production**: The rate of gluconeogenesis, retrieved with `getGlucoseProductionRate()`.
|
||||||
|
* - **Liver Enzymes**: Simulated levels of ALT (`getAltLevel()`) and AST (`getAstLevel()`), which
|
||||||
|
* rise in response to liver damage.
|
||||||
|
* - **Bilirubin**: The level of bilirubin in the blood, a marker for detoxification efficiency,
|
||||||
|
* available through `getBilirubinLevel()`.
|
||||||
|
*
|
||||||
|
* @subsection liver_flow_sec Liver Blood and Bile Flow
|
||||||
|
* The following diagram illustrates the high-level flow of substances into and out of the liver.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph LiverFlow {
|
||||||
|
* rankdir="LR";
|
||||||
|
* node [shape=record, style=rounded];
|
||||||
|
*
|
||||||
|
* Input [label="{<pv>Portal Vein (Nutrient-rich Blood)|<ha>Hepatic Artery (Oxygen-rich Blood)}"];
|
||||||
|
* Liver [label="<in>Liver Processing|{Metabolism | Detoxification | Synthesis}"];
|
||||||
|
* Output [label="{<hv>Hepatic Vein (Cleaned Blood to Body)|<bd>Bile Duct (Bile to Gallbladder)}"];
|
||||||
|
*
|
||||||
|
* Input:pv -> Liver:in;
|
||||||
|
* Input:ha -> Liver:in;
|
||||||
|
* Liver -> Output:hv;
|
||||||
|
* Liver -> Output:bd;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to create a `Liver` object and check its functional outputs.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Liver.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Liver object
|
||||||
|
* Liver liver(1);
|
||||||
|
*
|
||||||
|
* // Simulate for a short period
|
||||||
|
* std::cout << "Simulating Liver function..." << std::endl;
|
||||||
|
* liver.update(patient, 10.0); // Simulate 10 seconds of activity
|
||||||
|
* std::cout << liver.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Retrieve specific final vitals
|
||||||
|
* std::cout << "\n--- Liver Function Tests ---" << std::endl;
|
||||||
|
* std::cout << "Bile Production Rate: " << liver.getBileProductionRate() << " mL/min" << std::endl;
|
||||||
|
* std::cout << "ALT Level: " << liver.getAltLevel() << " U/L" << std::endl;
|
||||||
|
* std::cout << "AST Level: " << liver.getAstLevel() << " U/L" << std::endl;
|
||||||
|
* std::cout << "Bilirubin Level: " << liver.getBilirubinLevel() << " mg/dL" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Liver : public Organ {
|
class MEDICAL_LIB_API Liver : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
+106
-1
@@ -32,7 +32,112 @@ struct Bronchus {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Lungs organ with a more detailed physiological model.
|
* @brief Represents the Lungs organ, simulating respiratory mechanics and gas exchange.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The lungs are the primary organs of the respiratory system, responsible for gas exchange.
|
||||||
|
* Air is inhaled through the trachea, which branches into two main bronchi, one for each lung.
|
||||||
|
* These bronchi further divide into smaller bronchioles, eventually leading to tiny air sacs
|
||||||
|
* called alveoli, where oxygen from the inhaled air passes into the blood and carbon dioxide
|
||||||
|
* from the blood is released into the air to be exhaled.
|
||||||
|
*
|
||||||
|
* The process of breathing consists of two phases:
|
||||||
|
* 1. **Inspiration**: The diaphragm and intercostal muscles contract, expanding the chest cavity
|
||||||
|
* and drawing air into the lungs.
|
||||||
|
* 2. **Expiration**: The muscles relax, the chest cavity shrinks, and air is forced out of the lungs.
|
||||||
|
*
|
||||||
|
* The human lungs are divided into lobes; the right lung has three (upper, middle, lower) and the
|
||||||
|
* left lung has two (upper, lower).
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Lungs` class models the physiological functions of the lungs, including the mechanics of
|
||||||
|
* breathing and the resulting changes in vital signs.
|
||||||
|
*
|
||||||
|
* @subsection resp_mech_sec Respiratory Mechanics
|
||||||
|
* The anatomical structure is simplified into five `Lobe` structs and a main `Bronchus` struct.
|
||||||
|
* The `update()` method drives the respiratory cycle, which is governed by the `RespiratoryState`
|
||||||
|
* enum (`INSPIRATION`, `EXPIRATION`, `PAUSE`). The simulation calculates changes in lobe volume
|
||||||
|
* based on physiological parameters like `respirationRate` and `tidalVolume_mL`.
|
||||||
|
*
|
||||||
|
* @subsection gas_exchange_sec Gas Exchange and Vitals
|
||||||
|
* The simulation produces several key respiratory vital signs:
|
||||||
|
* - **Oxygen Saturation (SpO2)**: A measure of the oxygen level in the blood, accessible via `getOxygenSaturation()`.
|
||||||
|
* - **End-Tidal CO2 (etCO2)**: The concentration of carbon dioxide at the end of an exhaled breath,
|
||||||
|
* retrieved with `getEndTidalCO2()`. The class also generates a continuous capnography waveform
|
||||||
|
* (`getCapnographyWaveform()`).
|
||||||
|
* - **Tidal Volume**: The volume of air moved in a single breath, available through `getTidalVolume()`.
|
||||||
|
*
|
||||||
|
* @subsection airflow_graph_sec Airflow Diagram
|
||||||
|
* The following diagram shows the simplified path of air from the main bronchus to the five lobes.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph Airflow {
|
||||||
|
* rankdir="LR";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Trachea [label="Trachea / Main Bronchus"];
|
||||||
|
*
|
||||||
|
* subgraph cluster_RightLung {
|
||||||
|
* label="Right Lung";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightblue;
|
||||||
|
* RUL [label="Right Upper Lobe"];
|
||||||
|
* RML [label="Right Middle Lobe"];
|
||||||
|
* RLL [label="Right Lower Lobe"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* subgraph cluster_LeftLung {
|
||||||
|
* label="Left Lung";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightpink;
|
||||||
|
* LUL [label="Left Upper Lobe"];
|
||||||
|
* LLL [label="Left Lower Lobe"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Trachea -> RUL;
|
||||||
|
* Trachea -> RML;
|
||||||
|
* Trachea -> RLL;
|
||||||
|
* Trachea -> LUL;
|
||||||
|
* Trachea -> LLL;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code demonstrates how to create a `Lungs` object, set a
|
||||||
|
* respiration rate, and monitor its vitals over a short period.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include <vector>
|
||||||
|
* #include "MedicalLib/Lungs.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Lungs object
|
||||||
|
* Lungs lungs(1);
|
||||||
|
*
|
||||||
|
* // Set a custom respiration rate
|
||||||
|
* lungs.setRespirationRate(16.0); // 16 breaths per minute
|
||||||
|
*
|
||||||
|
* // Simulate for 10 seconds
|
||||||
|
* std::cout << "Simulating Lungs for 10 seconds..." << std::endl;
|
||||||
|
* for (int i = 0; i < 10; ++i) {
|
||||||
|
* lungs.update(patient, 1.0); // Update by 1.0 second
|
||||||
|
* std::cout << "Time: " << i + 1 << "s, " << lungs.getSummary() << std::endl;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Retrieve specific final vitals
|
||||||
|
* std::cout << "\n--- Simulation Results ---" << std::endl;
|
||||||
|
* std::cout << "Final SpO2: " << lungs.getOxygenSaturation() << "%" << std::endl;
|
||||||
|
* std::cout << "Final etCO2: " << lungs.getEndTidalCO2() << " mmHg" << std::endl;
|
||||||
|
* std::cout << "Final Tidal Volume: " << lungs.getTidalVolume() << " mL" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Lungs : public Organ {
|
class MEDICAL_LIB_API Lungs : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -13,7 +13,108 @@ struct DigestiveEnzymes {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Pancreas, with both endocrine and exocrine functions.
|
* @brief Represents the Pancreas, simulating its dual endocrine and exocrine functions.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The pancreas is a glandular organ that sits behind the stomach. It has two primary and distinct
|
||||||
|
* functions, making it a "heterocrine" gland:
|
||||||
|
*
|
||||||
|
* - **Endocrine Function**: The pancreas contains clusters of cells called the islets of
|
||||||
|
* Langerhans. These cells produce and secrete hormones directly into the bloodstream to regulate
|
||||||
|
* blood sugar levels. The two main hormones are:
|
||||||
|
* - **Insulin**: Lowers blood sugar by promoting glucose uptake by cells.
|
||||||
|
* - **Glucagon**: Raises blood sugar by stimulating the liver to release stored glucose.
|
||||||
|
*
|
||||||
|
* - **Exocrine Function**: The pancreas produces powerful digestive enzymes that are secreted into
|
||||||
|
* the small intestine (duodenum) to help digest food. These enzymes include:
|
||||||
|
* - **Amylase**: Breaks down carbohydrates.
|
||||||
|
* - **Lipase**: Breaks down fats.
|
||||||
|
* - **Proteases**: Break down proteins.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Pancreas` class models both the endocrine and exocrine roles of the organ.
|
||||||
|
*
|
||||||
|
* @subsection endocrine_model_sec Endocrine Simulation
|
||||||
|
* The endocrine function is simulated by tracking the secretion rates of key hormones. The `update()`
|
||||||
|
* method adjusts these rates based on simulated blood glucose levels (from the `Patient` object).
|
||||||
|
* Key outputs include:
|
||||||
|
* - `getInsulinSecretion()`: The rate of insulin release.
|
||||||
|
* - `getGlucagonSecretion()`: The rate of glucagon release.
|
||||||
|
*
|
||||||
|
* @subsection exocrine_model_sec Exocrine Simulation
|
||||||
|
* The exocrine function is modeled by the `releaseEnzymes()` method. When called, this method
|
||||||
|
* returns a `DigestiveEnzymes` struct, which contains the volume and concentration of secreted
|
||||||
|
* amylase and lipase, ready to be passed to the `Intestines` model.
|
||||||
|
*
|
||||||
|
* @subsection pancreas_func_sec Pancreas Function Diagram
|
||||||
|
* This diagram illustrates the two main functions of the pancreas.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph PancreasFunctions {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Pancreas [shape=ellipse];
|
||||||
|
*
|
||||||
|
* subgraph cluster_Endocrine {
|
||||||
|
* label="Endocrine Function";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightblue;
|
||||||
|
* Insulin [label="Insulin"];
|
||||||
|
* Glucagon [label="Glucagon"];
|
||||||
|
* Bloodstream [label="Bloodstream"];
|
||||||
|
* {Insulin, Glucagon} -> Bloodstream;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* subgraph cluster_Exocrine {
|
||||||
|
* label="Exocrine Function";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightgreen;
|
||||||
|
* Enzymes [label="Digestive Enzymes\n(Amylase, Lipase)"];
|
||||||
|
* Duodenum [label="Small Intestine"];
|
||||||
|
* Enzymes -> Duodenum;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Pancreas -> Insulin;
|
||||||
|
* Pancreas -> Glucagon;
|
||||||
|
* Pancreas -> Enzymes;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to simulate the pancreas and access both its endocrine and
|
||||||
|
* exocrine function outputs.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Pancreas.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
* patient.setVital("BloodGlucose", 120.0); // Set a high blood glucose to trigger insulin
|
||||||
|
*
|
||||||
|
* // Create a Pancreas object
|
||||||
|
* Pancreas pancreas(1);
|
||||||
|
*
|
||||||
|
* // Simulate for a short period
|
||||||
|
* std::cout << "Simulating Pancreas function..." << std::endl;
|
||||||
|
* pancreas.update(patient, 10.0); // Simulate 10 seconds of activity
|
||||||
|
*
|
||||||
|
* // Check endocrine output
|
||||||
|
* std::cout << "\n--- Endocrine Vitals ---" << std::endl;
|
||||||
|
* std::cout << "Insulin Secretion: " << pancreas.getInsulinSecretion() << " units/hr" << std::endl;
|
||||||
|
*
|
||||||
|
* // Check exocrine output
|
||||||
|
* DigestiveEnzymes released = pancreas.releaseEnzymes(1.0);
|
||||||
|
* std::cout << "\n--- Exocrine Release (1s) ---" << std::endl;
|
||||||
|
* std::cout << "Volume: " << released.volume_mL << " mL" << std::endl;
|
||||||
|
* std::cout << "Amylase: " << released.amylase_U_per_L << " U/L" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Pancreas : public Organ {
|
class MEDICAL_LIB_API Pancreas : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -23,7 +23,91 @@ struct SpinalTract {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Spinal Cord with a more detailed physiological model.
|
* @brief Represents the Spinal Cord, simulating the transmission of neural signals.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The spinal cord is a long, fragile, tube-like structure that begins at the end of the
|
||||||
|
* brain stem and continues down almost to the bottom of the spine. It is a vital link
|
||||||
|
* between the brain and the rest of the body, forming the central nervous system (CNS)
|
||||||
|
* along with the brain.
|
||||||
|
*
|
||||||
|
* The spinal cord has two primary functions:
|
||||||
|
* - **Signal Pathway**: It contains neural pathways that transmit information.
|
||||||
|
* - **Ascending Tracts**: Carry sensory information (touch, pain, temperature) from the
|
||||||
|
* peripheral nervous system up to the brain.
|
||||||
|
* - **Descending Tracts**: Carry motor commands from the brain down to the muscles and glands.
|
||||||
|
* - **Reflex Coordination**: It can independently mediate simple reflexes, which are rapid,
|
||||||
|
* involuntary responses to stimuli, without input from the brain.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `SpinalCord` class models the integrity and function of the major neural pathways.
|
||||||
|
*
|
||||||
|
* @subsection pathway_model_sec Pathway Model
|
||||||
|
* The simulation represents the major pathways as `SpinalTract` structs for the ascending
|
||||||
|
* (sensory) and descending (motor) signals. The integrity of these tracts is represented
|
||||||
|
* by the `SignalStatus` enum (`NORMAL`, `IMPAIRED`, `SEVERED`), allowing for the simulation
|
||||||
|
* of spinal cord injuries.
|
||||||
|
*
|
||||||
|
* Key functions to check the status include `getMotorPathwayStatus()` and `getSensoryPathwayStatus()`.
|
||||||
|
* A simplified `isReflexArcIntact()` function represents the status of a basic reflex.
|
||||||
|
*
|
||||||
|
* @subsection signal_flow_sec Neural Signal Flow Diagram
|
||||||
|
* This diagram shows the flow of motor and sensory signals between the brain, spinal cord,
|
||||||
|
* and the peripheral nervous system (the body).
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph SignalFlow {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* Brain [shape=ellipse];
|
||||||
|
* PNS [label="Peripheral Nervous System\n(Body)"];
|
||||||
|
*
|
||||||
|
* subgraph cluster_CNS {
|
||||||
|
* label="Central Nervous System";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightblue;
|
||||||
|
* SpinalCord [label="Spinal Cord"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Brain -> SpinalCord [label=" Motor Commands\n(Descending Tract)"];
|
||||||
|
* SpinalCord -> PNS [label=" Motor Output"];
|
||||||
|
* PNS -> SpinalCord [label=" Sensory Input"];
|
||||||
|
* SpinalCord -> Brain [label=" Sensory Information\n(Ascending Tract)"];
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to create a `SpinalCord` object and check its pathway status.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/SpinalCord.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a SpinalCord object
|
||||||
|
* SpinalCord spinalCord(1);
|
||||||
|
*
|
||||||
|
* // Check the initial status
|
||||||
|
* std::cout << "Initial State: " << spinalCord.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // In a larger simulation, an injury event might change the pathway status.
|
||||||
|
* // For this example, we just check the default state.
|
||||||
|
* if (spinalCord.getMotorPathwayStatus() == SignalStatus::NORMAL) {
|
||||||
|
* std::cout << "Motor pathways are intact." << std::endl;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* if (spinalCord.isReflexArcIntact()) {
|
||||||
|
* std::cout << "Basic reflex arcs are functional." << std::endl;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API SpinalCord : public Organ {
|
class MEDICAL_LIB_API SpinalCord : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -20,7 +20,95 @@ struct WhitePulp {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Spleen, involved in blood filtering and immunity.
|
* @brief Represents the Spleen, simulating its role in blood filtration and immunity.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The spleen is an organ located in the upper left part of the abdomen, and it's a key
|
||||||
|
* component of both the circulatory and lymphatic systems. It is not essential for life,
|
||||||
|
* but it performs several important functions. The spleen is composed of two primary
|
||||||
|
* types of tissue:
|
||||||
|
*
|
||||||
|
* - **Red Pulp**: This tissue acts as a blood filter. It removes old, malformed, or damaged
|
||||||
|
* red blood cells from circulation. It also serves as a reservoir for platelets and
|
||||||
|
* white blood cells, which can be released in an emergency.
|
||||||
|
*
|
||||||
|
* - **White Pulp**: This tissue is part of the immune system. It is rich in lymphocytes
|
||||||
|
* (B-cells and T-cells) and macrophages. It helps identify and fight off invading
|
||||||
|
* pathogens like bacteria and viruses found in the blood.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Spleen` class models the distinct functions of the red and white pulp.
|
||||||
|
*
|
||||||
|
* @subsection pulp_model_sec Pulp-Based Functional Model
|
||||||
|
* The simulation separates the spleen's functions into two structs:
|
||||||
|
* - `RedPulp`: Models the blood filtration process, including the rate at which old red blood
|
||||||
|
* cells are broken down (`getRbcBreakdownRate()`).
|
||||||
|
* - `WhitePulp`: Models the immune component, tracking the population of key immune cells like
|
||||||
|
* lymphocytes (`getLymphocyteCount()`).
|
||||||
|
*
|
||||||
|
* The `update()` method simulates the continuous activity of both pulp types.
|
||||||
|
*
|
||||||
|
* @subsection spleen_flow_sec Spleen Function Diagram
|
||||||
|
* This diagram illustrates how blood is processed by the two functional parts of the spleen.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph SpleenFunctions {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* BloodIn [label="Blood Supply"];
|
||||||
|
* Spleen [shape=ellipse];
|
||||||
|
* BloodOut [label="Filtered Blood"];
|
||||||
|
*
|
||||||
|
* subgraph cluster_RedPulp {
|
||||||
|
* label="Red Pulp";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightpink;
|
||||||
|
* Filter [label="Filter Blood\n(Remove old RBCs)"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* subgraph cluster_WhitePulp {
|
||||||
|
* label="White Pulp";
|
||||||
|
* style=filled;
|
||||||
|
* color=lightblue;
|
||||||
|
* Immunity [label="Immune Surveillance\n(Lymphocytes)"];
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* BloodIn -> Spleen;
|
||||||
|
* Spleen -> Filter;
|
||||||
|
* Spleen -> Immunity;
|
||||||
|
* {Filter, Immunity} -> BloodOut;
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to create a `Spleen` object and get a summary of its state.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Spleen.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Spleen object
|
||||||
|
* Spleen spleen(1);
|
||||||
|
*
|
||||||
|
* // Simulate for a short period
|
||||||
|
* std::cout << "Simulating Spleen function..." << std::endl;
|
||||||
|
* spleen.update(patient, 10.0); // Simulate 10 seconds of activity
|
||||||
|
* std::cout << spleen.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Retrieve specific data
|
||||||
|
* std::cout << "\n--- Spleen Vitals ---" << std::endl;
|
||||||
|
* std::cout << "RBC Breakdown Rate: " << spleen.getRbcBreakdownRate() << std::endl;
|
||||||
|
* std::cout << "Lymphocyte Count: " << spleen.getLymphocyteCount() << " million" << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Spleen : public Organ {
|
class MEDICAL_LIB_API Spleen : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -23,7 +23,85 @@ struct Chyme {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the Stomach with a more detailed physiological model.
|
* @brief Represents the Stomach, simulating the initial stages of digestion.
|
||||||
|
*
|
||||||
|
* @section bio_sec Biological Overview
|
||||||
|
* The stomach is a muscular, J-shaped organ in the upper abdomen. It is a key part of the
|
||||||
|
* digestive system. Its primary functions are:
|
||||||
|
* - **Storage**: It acts as a temporary reservoir for food coming from the esophagus, allowing
|
||||||
|
* for a large meal to be consumed at once.
|
||||||
|
* - **Digestion**: It secretes strong gastric juices, primarily hydrochloric acid and the enzyme
|
||||||
|
* pepsin, which begin the process of breaking down proteins. The stomach's muscular walls
|
||||||
|
* (rugae) contract to mix the food with these juices.
|
||||||
|
* - **Controlled Release**: The stomach turns the food into a semi-liquid mixture called **chyme**.
|
||||||
|
* It then slowly releases this chyme into the small intestine (duodenum) for further
|
||||||
|
* digestion and nutrient absorption.
|
||||||
|
*
|
||||||
|
* The digestive process involves several states, from being empty, to filling, actively
|
||||||
|
* digesting, and finally emptying its contents.
|
||||||
|
*
|
||||||
|
* @section model_sec Code Simulation
|
||||||
|
* This `Stomach` class models the digestive cycle of the stomach.
|
||||||
|
*
|
||||||
|
* @subsection state_model_sec State-Based Digestive Model
|
||||||
|
* The simulation is managed as a state machine, governed by the `GastricState` enum. The stomach
|
||||||
|
* transitions through these states based on its contents and time:
|
||||||
|
* - `EMPTY`: No contents.
|
||||||
|
* - `FILLING`: Food is being added (via `addSubstance()`).
|
||||||
|
* - `DIGESTING`: Contents are being mixed and broken down, and pH is lowered.
|
||||||
|
* - `EMPTYING`: Chyme is being passed to the intestines.
|
||||||
|
*
|
||||||
|
* The contents themselves are modeled by the `Chyme` struct, which tracks volume and acidity.
|
||||||
|
* The `update()` method drives the state transitions and simulates the secretion of gastric
|
||||||
|
* juices and the emptying process.
|
||||||
|
*
|
||||||
|
* @subsection gastric_state_diagram_sec Gastric State Diagram
|
||||||
|
* The following diagram illustrates the transitions between the stomach's digestive states.
|
||||||
|
*
|
||||||
|
* @dot
|
||||||
|
* digraph GastricStates {
|
||||||
|
* rankdir="TB";
|
||||||
|
* node [shape=box, style=rounded];
|
||||||
|
*
|
||||||
|
* EMPTY -> FILLING [label="addSubstance()"];
|
||||||
|
* FILLING -> DIGESTING [label="update()"];
|
||||||
|
* DIGESTING -> EMPTYING [label="update() over time"];
|
||||||
|
* EMPTYING -> EMPTY [label="volume = 0"];
|
||||||
|
* }
|
||||||
|
* @enddot
|
||||||
|
*
|
||||||
|
* @section usage_sec Example Usage
|
||||||
|
* The following C++ code shows how to add food to the stomach and observe the resulting
|
||||||
|
* changes in its state and volume.
|
||||||
|
*
|
||||||
|
* @code{.cpp}
|
||||||
|
* #include <iostream>
|
||||||
|
* #include "MedicalLib/Stomach.h"
|
||||||
|
* #include "MedicalLib/Patient.h"
|
||||||
|
*
|
||||||
|
* int main() {
|
||||||
|
* // A patient object is needed for the update function
|
||||||
|
* Patient patient;
|
||||||
|
*
|
||||||
|
* // Create a Stomach object
|
||||||
|
* Stomach stomach(1);
|
||||||
|
* std::cout << "Initial State: " << stomach.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Add a meal
|
||||||
|
* std::cout << "\nEating a 500mL meal..." << std::endl;
|
||||||
|
* stomach.addSubstance(500.0);
|
||||||
|
* std::cout << "State after eating: " << stomach.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* // Simulate digestion over time
|
||||||
|
* std::cout << "\nSimulating digestion for 30 minutes..." << std::endl;
|
||||||
|
* for (int i = 0; i < 30; ++i) {
|
||||||
|
* stomach.update(patient, 60.0); // Simulate 1 minute
|
||||||
|
* }
|
||||||
|
* std::cout << "State after 30 mins: " << stomach.getSummary() << std::endl;
|
||||||
|
*
|
||||||
|
* return 0;
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
*/
|
*/
|
||||||
class MEDICAL_LIB_API Stomach : public Organ {
|
class MEDICAL_LIB_API Stomach : public Organ {
|
||||||
public:
|
public:
|
||||||
|
|||||||
Reference in New Issue
Block a user