syntax = "proto3";
package pulse.engine.bind;
option java_package = "pulse.engine.bind";
option csharp_namespace = "pulse.engine.bind";
option optimize_for = SPEED;

import "pulse/cdm/bind/Enums.proto";
import "pulse/cdm/bind/Properties.proto";
import "pulse/cdm/bind/Engine.proto";
import "pulse/cdm/bind/Environment.proto";
import "pulse/cdm/bind/PatientNutrition.proto";
import "pulse/cdm/bind/ElectroCardioGram.proto";

message ConfigurationData

{
  message BaroreceptorConfigurationData
  {
    pulse.cdm.bind.ScalarData                          ResponseSlope                                         = 1;
    pulse.cdm.bind.ScalarTimeData                      HeartRateDistributedTimeDelay                         = 2;
    pulse.cdm.bind.ScalarTimeData                      HeartElastanceDistributedTimeDelay                    = 3;
    pulse.cdm.bind.ScalarTimeData                      SystemicResistanceDistributedTimeDelay                = 4;
    pulse.cdm.bind.ScalarTimeData                      VenousComplianceDistributedTimeDelay                  = 5;
    pulse.cdm.bind.ScalarData                          NormalizedHeartRateIntercept                          = 6;
    pulse.cdm.bind.ScalarData                          NormalizedHeartRateSympatheticSlope                   = 7;
    pulse.cdm.bind.ScalarData                          NormalizedHeartRateParasympatheticSlope               = 8;
    pulse.cdm.bind.ScalarData                          NormalizedHeartElastanceIntercept                     = 9;
    pulse.cdm.bind.ScalarData                          NormalizedHeartElastanceSympatheticSlope              = 10;
    pulse.cdm.bind.ScalarData                          NormalizedResistanceIntercept                         = 11;
    pulse.cdm.bind.ScalarData                          NormalizedResistanceSympatheticSlope                  = 12;
    pulse.cdm.bind.ScalarData                          NormalizedComplianceIntercept                         = 13;
    pulse.cdm.bind.ScalarData                          NormalizedComplianceParasympatheticSlope              = 14;
  }
  
  message BloodChemistryConfigurationData
  {
    pulse.cdm.bind.ScalarMassPerAmountData             MeanCorpuscularHemoglobin                             = 1;
    pulse.cdm.bind.ScalarVolumeData                    MeanCorpuscularVolume                                 = 2;
    pulse.cdm.bind.ScalarLengthData                    StandardDiffusionDistance                             = 3;
    pulse.cdm.bind.ScalarAreaPerTimePressureData       StandardOxygenDiffusionCoefficient                    = 4;
  }
  
  message CardiovascularConfigurationData
  {
    pulse.cdm.bind.ScalarPressurePerVolumeData         LeftHeartElastanceMaximum                             = 1;
    pulse.cdm.bind.ScalarPressurePerVolumeData         LeftHeartElastanceMinimum                             = 2;
    pulse.cdm.bind.Scalar0To1Data                      MinimumBloodVolumeFraction                            = 3;
    pulse.cdm.bind.ScalarPressurePerVolumeData         RightHeartElastanceMaximum                            = 4;
    pulse.cdm.bind.ScalarPressurePerVolumeData         RightHeartElastanceMinimum                            = 5;
    pulse.cdm.bind.ScalarData                          StandardPulmonaryCapillaryCoverage                    = 6;
  }
  
  message CircuitConfigurationData
  {
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     CardiovascularOpenResistance                         = 1;;
    pulse.cdm.bind.ScalarElectricResistanceData        DefaultClosedElectricResistance                      = 2;;
    pulse.cdm.bind.ScalarElectricResistanceData        DefaultOpenElectricResistance                        = 3;;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     DefaultClosedFlowResistance                          = 4;;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     DefaultOpenFlowResistance                            = 5;;
    pulse.cdm.bind.ScalarHeatResistanceData            DefaultClosedHeatResistance                          = 6;;
    pulse.cdm.bind.ScalarHeatResistanceData            DefaultOpenHeatResistance                            = 7;;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     MachineClosedResistance                              = 8;;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     MachineOpenResistance                                = 9;;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     RespiratoryClosedResistance                          = 10;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     RespiratoryOpenResistance                            = 11;
  }
  
  message ConstantsConfigurationData
  {
    pulse.cdm.bind.ScalarData                                   OxygenMetabolicConstant                              = 1;
    pulse.cdm.bind.ScalarPowerPerAreaTemperatureToTheFourthData StefanBoltzmann                                      = 2;
    pulse.cdm.bind.ScalarHeatCapacitancePerAmountData           UniversalGasConstant                                 = 3;
  }
  
  message DrugsConfigurationData
  {
    pulse.cdm.bind.eSwitch                             PDModel                                              = 1;
  }
  
  message ECGConfigurationData
  {
    oneof ElectroCardioGramInterpolator
    {
      string                                           InterpolatorFileName                                 = 1;/**<< @brief */
      pulse.cdm.bind.ElectroCardioGramWaveformListData Interpolator                                         = 2;/**<< @brief */
    }
  }
  
  message EnergyConfigurationData
  {
    pulse.cdm.bind.ScalarHeatCapacitancePerMassData    BodySpecificHeat                                     = 1;
    pulse.cdm.bind.ScalarData                          CarbonDioxideProductionFromOxygenConsumptionConstant = 2;
    pulse.cdm.bind.ScalarTemperatureData               CoreTemperatureLow                                   = 3;
    pulse.cdm.bind.ScalarTemperatureData               CoreTemperatureHigh                                  = 4;
    pulse.cdm.bind.ScalarTemperatureData               DeltaCoreTemperatureLow                              = 5;
    pulse.cdm.bind.ScalarEnergyPerAmountData           EnergyPerATP                                         = 6;
    pulse.cdm.bind.ScalarHeatConductanceData           SweatHeatTransfer                                    = 7;
    pulse.cdm.bind.ScalarEnergyPerMassData             VaporizationEnergy                                   = 8;
    pulse.cdm.bind.ScalarHeatCapacitancePerMassData    VaporSpecificHeat                                    = 9;
  }
  
  message EnvironmentConfigurationData
  {
    oneof Option
    {
      pulse.cdm.bind.EnvironmentalConditionsData       InitialConditions                                    = 1;/**<< @brief An environment conditions object with properties to set in the system environmental conditions. */
      string                                           InitialConditionsFile                                = 2;/**<< @brief File containing an environment conditions objet with properties to set in the environmental conditions. */
    }
    pulse.cdm.bind.ScalarMassPerVolumeData             AirDensity                                           = 3;
    pulse.cdm.bind.ScalarHeatCapacitancePerMassData    AirSpecificHeat                                      = 4;
    pulse.cdm.bind.ScalarMassPerAmountData             MolarMassOfDryAir                                    = 5;
    pulse.cdm.bind.ScalarMassPerAmountData             MolarMassOfWaterVapor                                = 6;
    pulse.cdm.bind.ScalarMassPerVolumeData             WaterDensity                                         = 7;
  }
  
  message GastrointestinalConfigurationData
  {
    oneof Option
    {
      pulse.cdm.bind.NutritionData                     InitialStomachContents                               = 1;/**<< @brief An stomach contents object with properties to set in the system. */
      string                                           InitialStomachContentsFile                           = 2;/**<< @brief File containing an stomach contents objet with properties to set in the. */
    }
    pulse.cdm.bind.Scalar0To1Data                      CalciumAbsorptionFraction                            = 3;
    pulse.cdm.bind.ScalarMassPerTimeData               CalciumDigestionRate                                 = 4;
    pulse.cdm.bind.Scalar0To1Data                      CarbohydrateAbsorptionFraction                       = 5;
    pulse.cdm.bind.ScalarMassPerTimeData               DefaultCarbohydrateDigestionRate                     = 6;
    pulse.cdm.bind.ScalarMassPerTimeData               DefaultFatDigestionRate                              = 7;
    pulse.cdm.bind.ScalarMassPerTimeData               DefaultProteinDigestionRate                          = 8;
    pulse.cdm.bind.Scalar0To1Data                      FatAbsorptionFraction                                = 9;
    pulse.cdm.bind.Scalar0To1Data                      ProteinToUreaFraction                                = 10;
    pulse.cdm.bind.ScalarVolumePerTimeData             WaterDigestionRate                                   = 11;
  }
  
  message NervousConfigurationData
  {
    pulse.cdm.bind.ScalarLengthData                    PupilDiameterBaseline                                = 1;
  }
  
  message RenalConfigurationData
  {
    pulse.cdm.bind.eSwitch                             EnableRenal                                          = 1;
                                                       
    pulse.cdm.bind.ScalarMassPerVolumeData             PlasmaSodiumConcentrationSetPoint                    = 2;
                                                       
    pulse.cdm.bind.ScalarAreaData                      LeftGlomerularFilteringSurfaceAreaBaseline           = 3;
    pulse.cdm.bind.ScalarVolumePerTimePressureAreaData LeftGlomerularFluidPermeabilityBaseline              = 4;
    pulse.cdm.bind.ScalarAreaData                      LeftTubularReabsorptionFilteringSurfaceAreaBaseline  = 5;
    pulse.cdm.bind.ScalarVolumePerTimePressureAreaData LeftTubularReabsorptionFluidPermeabilityBaseline     = 6;
                                                       
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     MaximumAfferentResistance                            = 7;
    pulse.cdm.bind.ScalarPressureTimePerVolumeData     MinimumAfferentResistance                            = 8;
                                                       
    pulse.cdm.bind.ScalarAreaData                      RightGlomerularFilteringSurfaceAreaBaseline          = 9;
    pulse.cdm.bind.ScalarVolumePerTimePressureAreaData RightGlomerularFluidPermeabilityBaseline             = 10;
    pulse.cdm.bind.ScalarAreaData                      RightTubularReabsorptionFilteringSurfaceAreaBaseline = 11;
    pulse.cdm.bind.ScalarVolumePerTimePressureAreaData RightTubularReabsorptionFluidPermeabilityBaseline    = 12;
                                                       
    pulse.cdm.bind.ScalarMassPerTimeData               TargetSodiumDelivery                                 = 13;
  }
  
  message RespiratoryConfigurationData
  {
    pulse.cdm.bind.ScalarPressureData                  CentralControllerCO2PressureSetPoint                 = 1;
    pulse.cdm.bind.ScalarData                          CentralVentilatoryControllerGain                     = 2;
    pulse.cdm.bind.ScalarVolumeData                    MinimumAllowableTidalVolume                          = 3;
    pulse.cdm.bind.ScalarTimeData                      MinimumAllowableInpiratoryAndExpiratoryPeriod        = 4;
    pulse.cdm.bind.ScalarPressureData                  PeripheralControllerCO2PressureSetPoint              = 5;
    pulse.cdm.bind.ScalarData                          PeripheralVentilatoryControllerGain                  = 6;
    pulse.cdm.bind.ScalarVolumePerTimeData             PulmonaryVentilationRateMaximum                      = 7;
    pulse.cdm.bind.ScalarVolumeData                    VentilationTidalVolumeIntercept                      = 8;
    pulse.cdm.bind.ScalarPressureData                  VentilatoryOcclusionPressure                         = 9;
  }
  
  message TissueConfigurationData
  {
    pulse.cdm.bind.eSwitch                             EnableTissue                                         = 1;
  }
  
  pulse.cdm.bind.ScalarTimeData                        TimeStep                                             = 1;/**<< @brief */
  oneof StabilizationCriteria
  {
    string                                             StabilizationFileName                                = 2;/**<< @brief */
    pulse.cdm.bind.TimedStabilizationData              TimedStabilization                                   = 3;/**<< @brief */
    pulse.cdm.bind.DynamicStabilizationData            DynamicStabilization                                 = 4;/**<< @brief */
  }
  pulse.cdm.bind.eSwitch                               WritePatientBaselineFile                             = 5;/**<< @brief Inform execution to write out patient object after stabilization completes. */
  pulse.cdm.bind.AutoSerializationData                 AutoSerialization                                    = 6;
  BaroreceptorConfigurationData                        BaroreceptorConfiguration                            = 7;
  BloodChemistryConfigurationData                      BloodChemistryConfiguration                          = 8;
  CardiovascularConfigurationData                      CardiovascularConfiguration                          = 9;
  CircuitConfigurationData                             CircuitConfiguration                                 = 10;
  ConstantsConfigurationData                           ConstantsConfiguration                               = 11;
  DrugsConfigurationData                               DrugsConfiguration                                   = 12;
  ECGConfigurationData                                 ECGConfiguration                                     = 13;
  EnergyConfigurationData                              EnergyConfiguration                                  = 14;
  EnvironmentConfigurationData                         EnvironmentConfiguration                             = 15;
  GastrointestinalConfigurationData                    GastrointestinalConfiguration                        = 16;
  NervousConfigurationData                             NervousConfiguration                                 = 17;
  RenalConfigurationData                               RenalConfiguration                                   = 18;
  RespiratoryConfigurationData                         RespiratoryConfiguration                             = 19;
  TissueConfigurationData                              TissueConfiguration                                  = 20;
}
 