Files
medicallib/include/MedicalLib/Brain.h
T
google-labs-jules[bot] fb0962ff95 feat: Implement major physiological feedback loops
This commit re-implements several critical physiological feedback loops that were lost, enhancing the realism of the simulation.

The following systems have been added:

1.  **Full Digestive Loop:**
    - The Gallbladder now has a `releaseBile` method, triggered by chyme in the intestines.
    - The Pancreas has a `releaseEnzymes` method, also triggered by chyme.
    - The Intestines' digestion logic has been updated to be more effective when bile and enzymes are present.

2.  **Autonomic Nervous System Control:**
    - The Brain now monitors blood gas (O2/CO2) and blood pressure levels.
    - It dynamically adjusts the respiration rate of the Lungs via a new `setRespirationRate` method in response to blood gas changes.
    - It controls the heart rate via a new `setHeartRate` method in response to blood pressure changes, simulating the baroreceptor reflex.
    - The previous hardcoded rate control logic in the Lungs and Heart has been removed.

3.  **Kidney Blood Pressure Regulation (RAAS):**
    - A simplified Renin-Angiotensin-Aldosterone System has been implemented.
    - The Kidneys now secrete renin in response to low blood pressure.
    - The Liver produces a constant supply of angiotensinogen.
    - A new `angiotensin_au` value in the Blood struct is calculated in the main patient update loop.
    - This hormone now acts as a vasoconstrictor, directly affecting the blood pressure calculation in the Heart.

These changes significantly increase the complexity and fidelity of the medical simulation by modeling the interconnectedness of the major organ systems.
2025-08-20 08:55:54 +00:00

87 lines
2.4 KiB
C++

#pragma once
#include "Organ.h"
#include <vector>
#include <string>
#include <deque>
#include <map>
/**
* @brief Represents a specific region of the brain.
*/
struct BrainRegion {
std::string name;
double activityLevel; // 0.0 to 1.0
double bloodFlow_ml_100g_min;
};
/**
* @brief Represents the Brain organ with a more detailed physiological model.
*/
class MEDICAL_LIB_API Brain : public Organ {
public:
/**
* @brief Constructor for the Brain class.
* @param id The ID of the organ.
*/
Brain(int id);
/**
* @brief Updates the brain's state over a time interval.
* @param patient A reference to the patient object.
* @param deltaTime_s The time elapsed in seconds.
*/
void update(Patient& patient, double deltaTime_s) override;
/**
* @brief Gets a string summary of the brain's vitals.
* @return A string containing the brain's vital signs.
*/
std::string getSummary() const override;
// --- Getters for Key Neurological Vitals ---
/** @brief Gets the Glasgow Coma Scale score (simplified). */
int getGCS() const;
/** @brief Gets the intracranial pressure in mmHg. */
double getIntracranialPressure() const;
/** @brief Gets the cerebral perfusion pressure in mmHg. */
double getCerebralPerfusionPressure() const;
/** @brief Gets the data for a simplified EEG waveform. */
const std::deque<double>& getEegWaveform() const;
private:
// --- Private Helper Methods ---
void updateActivity(double deltaTime_s);
void updatePressures(double meanArterialPressure);
void updateAutonomicControl(Patient& patient, double deltaTime_s);
double generateEegValue();
// --- Physiological Parameters ---
int gcsScore; ///< Glasgow Coma Scale (3-15)
double intracranialPressure_mmHg; ///< ICP
double cerebralPerfusionPressure_mmHg; ///< CPP
double meanArterialPressure_mmHg; ///< MAP (placeholder, needs to be linked to Heart)
// --- Simulation State ---
double totalTime_s;
// --- Anatomical Components ---
BrainRegion frontalLobe;
BrainRegion temporalLobe;
BrainRegion parietalLobe;
BrainRegion occipitalLobe;
BrainRegion cerebellum;
// --- Autonomic Control Targets ---
double targetRespirationRate_bpm;
double targetHeartRate_bpm;
// --- Waveform Data ---
std::deque<double> eegData;
size_t eegHistorySize;
};