From 5e0c4238b3364854e40aa4c811f12b0faf55c5fe Mon Sep 17 00:00:00 2001 From: Michael Sevestre Date: Thu, 18 May 2023 20:44:14 -0400 Subject: [PATCH 1/3] Fixes #2621. Fixes #2622 --- .../Services/HIDiseaseStateImplementation.cs | 22 ++-- .../HIDiseaseStateImplementationSpecs.cs | 117 +++++++++--------- .../CustomColorArrayManagerSpecs.cs | 2 +- 3 files changed, 74 insertions(+), 67 deletions(-) diff --git a/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs b/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs index 834488485..9d59cdcce 100644 --- a/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs +++ b/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs @@ -36,14 +36,14 @@ private static HIFactors createFactors(double forA, double forB, double forC) => }; private static readonly HIFactors _portalFlowScalingFactor = createFactors(0.4, 0.36, 0.04); - private static readonly HIFactors _hepaticFlowScalingFactor = createFactors(1.3, 2.3, 3.4); + private static readonly HIFactors _hepaticFlowScalingFactor = createFactors(1.61, 2.34, 5.29); private static readonly HIFactors _hepaticVolumeScalingFactor = createFactors(0.69, 0.55, 0.28); private static readonly HIFactors _renalFlowScalingFactor = createFactors(0.88, 0.65, 0.48); private static readonly HIFactors _cardiacIndexScalingFactor = createFactors(1.11, 1.27, 1.36); private static readonly HIFactors _gfrScalingFactor = createFactors(1, 0.7, 0.36); private static readonly HIFactors _albuminScalingFactor = createFactors(0.81, 0.68, 0.5); private static readonly HIFactors _agpScalingFactor = createFactors(0.6, 0.56, 0.3); - private static readonly HIFactors _hematocritScalingFactor = createFactors(0.92, 0.88, 0.83); + private static readonly HIFactors _hematocritScalingFactor = createFactors(0.86, 0.822, 0.778); private static readonly Cache _moleculeScalingFactorEdginton = new() { @@ -144,11 +144,17 @@ private void updateBloodFlowsAndVolumes(Individual individual, Action updateBloodFlowSpec(x, portal_factor)); updateBloodFlowSpec(LIVER, liver_factor); updateBloodFlowSpec(KIDNEY, kidney_factor); + //retrieve the scaling factor based on publication and github entry //see https://github.com/Open-Systems-Pharmacology/Forum/discussions/1341 - var otherOrganFactor = (ci_factor * (Q_other + Q_portal + Q_kidney + Q_liver + Q_brain) - (Q_brain + Q_portal * portal_factor + Q_liver_HI * liver_factor + Q_kidney * kidney_factor)) / Q_other; - otherOrgans.Each(x => updateBloodFlowSpec(x, otherOrganFactor)); + var otherOrganDiseaseFactor = (ci_factor * (Q_other + Q_portal + Q_kidney + Q_liver + Q_brain) - (Q_brain + Q_portal * portal_factor + Q_liver_HI * liver_factor + Q_kidney * kidney_factor)) / Q_other; + otherOrgans.Each(x => updateBloodFlowSpec(x, otherOrganDiseaseFactor)); } private Action updateBloodFlowSpecDef(Action updateParameterFunc, IContainer organism) => (organName, factor) => diff --git a/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs b/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs index c2a886d1c..d33b8fce6 100644 --- a/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs +++ b/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs @@ -71,7 +71,7 @@ protected override void Context() _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit = 8.65; _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit = 20; //HCT parameter is a discrete distribution parameter. In order to update the value properly, we need to set the mean value - _individual.Organism.Parameter(HCT).DowncastTo().MeanParameter.Value = 0.43; + _individual.Organism.Parameter(HCT).DowncastTo().MeanParameter.Value = 0.45; } protected override void Because() @@ -126,44 +126,45 @@ protected override void Context() [Observation] public void should_return_the_expected_values_for_specific_blood_flows() { - _individual.Organism.Organ(STOMACH).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(15.44, 1e-2); - _individual.Organism.Organ(SMALL_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(35.91, 1e-2); - _individual.Organism.Organ(LARGE_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(25.22, 1e-2); - _individual.Organism.Organ(SPLEEN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(32.04, 1e-2); - _individual.Organism.Organ(PANCREAS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(13.67, 1e-2); - _individual.Organism.Organ(LIVER).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(23.32, 1e-2); - _individual.Organism.Organ(KIDNEY).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(266.38, 1e-2); - _individual.Organism.Organ(BONE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(4.63, 1e-2); - _individual.Organism.Organ(FAT).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(3.67, 1e-2); - _individual.Organism.Organ(GONADS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(13.58, 1e-2); - _individual.Organism.Organ(HEART).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(105.10, 1e-2); - _individual.Organism.Organ(MUSCLE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(5.77, 1e-2); - _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(14.58, 1e-2); + _individual.Organism.Organ(STOMACH).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(15.44, 1e-3); + _individual.Organism.Organ(SMALL_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(35.91, 1e-3); + _individual.Organism.Organ(LARGE_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(25.22, 1e-3); + _individual.Organism.Organ(SPLEEN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(32.04, 1e-3); + _individual.Organism.Organ(PANCREAS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(13.67, 1e-3); + _individual.Organism.Organ(LIVER).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(28.88, 1e-3); + _individual.Organism.Organ(KIDNEY).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(266.38, 1e-3); + //for other blood flow, we have some rounding error due to that we are calculating with 2 digits in the excel file + _individual.Organism.Organ(BONE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(4.539, 1e-2); + _individual.Organism.Organ(FAT).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(3.598, 1e-2); + _individual.Organism.Organ(GONADS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(13.28, 1e-2); + _individual.Organism.Organ(HEART).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(102.71, 1e-2); + _individual.Organism.Organ(MUSCLE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(5.63, 1e-2); + _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(14.25, 1e-2); } [Observation] public void should_return_the_expected_values_for_ontogeny_factor_albumin_and_glycoprotein() { - _individual.Organism.Parameter(ONTOGENY_FACTOR_ALBUMIN).ValueInDisplayUnit.ShouldBeEqualTo(0.81, 1e-2); - _individual.Organism.Parameter(ONTOGENY_FACTOR_AGP).ValueInDisplayUnit.ShouldBeEqualTo(0.6, 1e-2); + _individual.Organism.Parameter(ONTOGENY_FACTOR_ALBUMIN).ValueInDisplayUnit.ShouldBeEqualTo(0.81, 1e-3); + _individual.Organism.Parameter(ONTOGENY_FACTOR_AGP).ValueInDisplayUnit.ShouldBeEqualTo(0.6, 1e-3); } [Observation] public void should_return_the_expected_values_for_gfr_spec() { - _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit.ShouldBeEqualTo(20 * 1, 1e-2); + _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit.ShouldBeEqualTo(20 * 1, 1e-3); } [Observation] public void should_return_the_expected_values_for_hct() { - _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.395, 1e-2); + _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.387, 1e-3); } [Observation] public void should_return_the_expected_values_for_volumes() { - _individual.Organism.Organ(LIVER).Parameter(VOLUME).ValueInDisplayUnit.ShouldBeEqualTo(1.64, 1e-2); + _individual.Organism.Organ(LIVER).Parameter(VOLUME).ValueInDisplayUnit.ShouldBeEqualTo(1.642, 1e-3); } } @@ -178,7 +179,7 @@ protected override void Context() [Observation] public void should_return_the_expected_values_for_reference_concentration() { - _molecule.ReferenceConcentration.Value.ShouldBeEqualTo(5 * 0.89, 1e-2); + _molecule.ReferenceConcentration.Value.ShouldBeEqualTo(5 * 0.89, 1e-3); } } @@ -193,44 +194,45 @@ protected override void Context() [Observation] public void should_return_the_expected_values_for_specific_blood_flows() { - _individual.Organism.Organ(STOMACH).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(13.90, 1e-2); - _individual.Organism.Organ(SMALL_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(32.32, 1e-2); - _individual.Organism.Organ(LARGE_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(22.70, 1e-2); - _individual.Organism.Organ(SPLEEN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(28.84, 1e-2); - _individual.Organism.Organ(PANCREAS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(12.30, 1e-2); - _individual.Organism.Organ(LIVER).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(41.26, 1e-2); - _individual.Organism.Organ(KIDNEY).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(196.76, 1e-2); - _individual.Organism.Organ(BONE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(6.04, 1e-2); - _individual.Organism.Organ(FAT).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(4.79, 1e-2); - _individual.Organism.Organ(GONADS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(17.69, 1e-2); - _individual.Organism.Organ(HEART).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(136.86, 1e-2); - _individual.Organism.Organ(MUSCLE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(7.51, 1e-2); - _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(18.99, 1e-2); + _individual.Organism.Organ(STOMACH).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(13.90, 1e-3); + _individual.Organism.Organ(SMALL_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(32.32, 1e-3); + _individual.Organism.Organ(LARGE_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(22.70, 1e-3); + _individual.Organism.Organ(SPLEEN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(28.84, 1e-3); + _individual.Organism.Organ(PANCREAS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(12.30, 1e-3); + _individual.Organism.Organ(LIVER).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(41.964, 1e-3); + _individual.Organism.Organ(KIDNEY).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(196.76, 1e-3); + //for other blood flow, we have some rounding error due to that we are calculating with 2 digits in the excel file + _individual.Organism.Organ(BONE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(6.03, 1e-2); + _individual.Organism.Organ(FAT).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(4.78, 1e-2); + _individual.Organism.Organ(GONADS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(17.66, 1e-2); + _individual.Organism.Organ(HEART).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(136.60, 1e-2); + _individual.Organism.Organ(MUSCLE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(7.49, 1e-2); + _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(18.95, 1e-2); } [Observation] public void should_return_the_expected_values_for_ontogeny_factor_albumin_and_glycoprotein() { - _individual.Organism.Parameter(ONTOGENY_FACTOR_ALBUMIN).ValueInDisplayUnit.ShouldBeEqualTo(0.68, 1e-2); - _individual.Organism.Parameter(ONTOGENY_FACTOR_AGP).ValueInDisplayUnit.ShouldBeEqualTo(0.56, 1e-2); + _individual.Organism.Parameter(ONTOGENY_FACTOR_ALBUMIN).ValueInDisplayUnit.ShouldBeEqualTo(0.68, 1e-3); + _individual.Organism.Parameter(ONTOGENY_FACTOR_AGP).ValueInDisplayUnit.ShouldBeEqualTo(0.56, 1e-3); } [Observation] public void should_return_the_expected_values_for_gfr_spec() { - _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit.ShouldBeEqualTo(20 * 0.7, 1e-2); + _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit.ShouldBeEqualTo(20 * 0.7, 1e-3); } [Observation] public void should_return_the_expected_values_for_hct() { - _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.378, 1e-2); + _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.37, 1e-3); } [Observation] public void should_return_the_expected_values_for_volumes() { - _individual.Organism.Organ(LIVER).Parameter(VOLUME).ValueInDisplayUnit.ShouldBeEqualTo(1.31, 1e-2); + _individual.Organism.Organ(LIVER).Parameter(VOLUME).ValueInDisplayUnit.ShouldBeEqualTo(1.31, 1e-3); } } @@ -245,7 +247,7 @@ protected override void Context() [Observation] public void should_return_the_expected_values_for_reference_concentration() { - _molecule.ReferenceConcentration.Value.ShouldBeEqualTo(5 * 0.62, 1e-2); + _molecule.ReferenceConcentration.Value.ShouldBeEqualTo(5 * 0.62, 1e-3); } } @@ -260,44 +262,45 @@ protected override void Context() [Observation] public void should_return_the_expected_values_for_specific_blood_flows() { - _individual.Organism.Organ(STOMACH).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(1.54, 1e-2); - _individual.Organism.Organ(SMALL_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(3.60, 1e-2); - _individual.Organism.Organ(LARGE_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(2.52, 1e-2); - _individual.Organism.Organ(SPLEEN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(3.20, 1e-2); - _individual.Organism.Organ(PANCREAS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(1.37, 1e-2); - _individual.Organism.Organ(LIVER).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(61.00, 1e-2); - _individual.Organism.Organ(KIDNEY).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(145.30, 1e-2); - _individual.Organism.Organ(BONE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(7.52, 1e-2); - _individual.Organism.Organ(FAT).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(5.96, 1e-2); - _individual.Organism.Organ(GONADS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(22.04, 1e-2); - _individual.Organism.Organ(HEART).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(170.50, 1e-2); - _individual.Organism.Organ(MUSCLE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(9.35, 1e-2); - _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(23.66, 1e-2); + _individual.Organism.Organ(STOMACH).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(1.544, 1e-3); + _individual.Organism.Organ(SMALL_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(3.590, 1e-3); + _individual.Organism.Organ(LARGE_INTESTINE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(2.522, 1e-3); + _individual.Organism.Organ(SPLEEN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(3.204, 1e-3); + _individual.Organism.Organ(PANCREAS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(1.367, 1e-3); + _individual.Organism.Organ(LIVER).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(94.933, 1e-3); + _individual.Organism.Organ(KIDNEY).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(145.30, 1e-3); + //for other blood flow, we have some rounding error due to that we are calculating with 2 digits in the excel file + _individual.Organism.Organ(BONE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(7.26, 1e-2); + _individual.Organism.Organ(FAT).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(5.76, 1e-2); + _individual.Organism.Organ(GONADS).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(21.29, 1e-2); + _individual.Organism.Organ(HEART).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(164.66, 1e-2); + _individual.Organism.Organ(MUSCLE).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(9.02, 1e-2); + _individual.Organism.Organ(SKIN).Parameter(SPECIFIC_BLOOD_FLOW_RATE).ValueInDisplayUnit.ShouldBeEqualTo(22.85, 1e-2); } [Observation] public void should_return_the_expected_values_for_ontogeny_factor_albumin_and_glycoprotein() { _individual.Organism.Parameter(ONTOGENY_FACTOR_ALBUMIN).ValueInDisplayUnit.ShouldBeEqualTo(0.5, 1e-2); - _individual.Organism.Parameter(ONTOGENY_FACTOR_AGP).ValueInDisplayUnit.ShouldBeEqualTo(0.3, 1e-2); + _individual.Organism.Parameter(ONTOGENY_FACTOR_AGP).ValueInDisplayUnit.ShouldBeEqualTo(0.3, 1e-3); } [Observation] public void should_return_the_expected_values_for_gfr_spec() { - _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit.ShouldBeEqualTo(20 * 0.36, 1e-2); + _individual.Organism.Organ(KIDNEY).Parameter(GFR_SPEC).ValueInDisplayUnit.ShouldBeEqualTo(20 * 0.36, 1e-3); } [Observation] public void should_return_the_expected_values_for_hct() { - _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.357, 1e-2); + _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.35, 1e-3); } [Observation] public void should_return_the_expected_values_for_volumes() { - _individual.Organism.Organ(LIVER).Parameter(VOLUME).ValueInDisplayUnit.ShouldBeEqualTo(0.67, 1e-2); + _individual.Organism.Organ(LIVER).Parameter(VOLUME).ValueInDisplayUnit.ShouldBeEqualTo(0.666, 1e-3); } } @@ -312,7 +315,7 @@ protected override void Context() [Observation] public void should_return_the_expected_values_for_reference_concentration() { - _molecule.ReferenceConcentration.Value.ShouldBeEqualTo(5 * 0.32, 1e-2); + _molecule.ReferenceConcentration.Value.ShouldBeEqualTo(5 * 0.32, 1e-3); } } diff --git a/tests/PKSim.UI.Tests/CustomColorArrayManagerSpecs.cs b/tests/PKSim.UI.Tests/CustomColorArrayManagerSpecs.cs index 2ac7e41c4..79c588d30 100644 --- a/tests/PKSim.UI.Tests/CustomColorArrayManagerSpecs.cs +++ b/tests/PKSim.UI.Tests/CustomColorArrayManagerSpecs.cs @@ -24,7 +24,7 @@ protected override void Context() { base.Context(); _customColors = new Matrix(10, 1); - sut.PushRecentColor(_customColors as Matrix, Color.Yellow); + sut.PushRecentColor(_customColors, Color.Yellow); sut.PushRecentColor(_customColors, Color.Brown); sut.PushRecentColor(_customColors, Color.Orange); sut.PushRecentColor(_customColors, Color.Black); From 705a5624ae157064f452edafd713b673d9da1b61 Mon Sep 17 00:00:00 2001 From: Michael Sevestre Date: Thu, 18 May 2023 20:46:55 -0400 Subject: [PATCH 2/3] Fixes #2621. Fixes #2622 --- .../Services/HIDiseaseStateImplementation.cs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs b/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs index 9d59cdcce..44972cccd 100644 --- a/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs +++ b/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs @@ -144,32 +144,28 @@ private void updateBloodFlowsAndVolumes(Individual individual, Action updateBloodFlowSpec(x, portal_factor)); updateBloodFlowSpec(LIVER, liver_factor); updateBloodFlowSpec(KIDNEY, kidney_factor); - //retrieve the scaling factor based on publication and github entry //see https://github.com/Open-Systems-Pharmacology/Forum/discussions/1341 var otherOrganDiseaseFactor = (ci_factor * (Q_other + Q_portal + Q_kidney + Q_liver + Q_brain) - (Q_brain + Q_portal * portal_factor + Q_liver_HI * liver_factor + Q_kidney * kidney_factor)) / Q_other; From dc990a8bd7e06ffe1e5798f5c117e41c8121f596 Mon Sep 17 00:00:00 2001 From: Michael Sevestre Date: Sat, 20 May 2023 10:46:50 -0400 Subject: [PATCH 3/3] Fixes #2621 --- .../Services/HIDiseaseStateImplementation.cs | 16 ++++++++-------- .../HIDiseaseStateImplementationSpecs.cs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs b/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs index 44972cccd..de35ea3b3 100644 --- a/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs +++ b/src/PKSim.Core/Services/HIDiseaseStateImplementation.cs @@ -43,7 +43,7 @@ private static HIFactors createFactors(double forA, double forB, double forC) => private static readonly HIFactors _gfrScalingFactor = createFactors(1, 0.7, 0.36); private static readonly HIFactors _albuminScalingFactor = createFactors(0.81, 0.68, 0.5); private static readonly HIFactors _agpScalingFactor = createFactors(0.6, 0.56, 0.3); - private static readonly HIFactors _hematocritScalingFactor = createFactors(0.86, 0.822, 0.778); + private static readonly HIFactors _hematocritScalingFactor = createFactors(0.866, 0.822, 0.778); private static readonly Cache _moleculeScalingFactorEdginton = new() { @@ -78,16 +78,16 @@ public HIDiseaseStateImplementation(IDimensionRepository dimensionRepository, _ageDimension = dimensionRepository.AgeInYears; } - public override bool ApplyTo(Individual individual) => applyTo(individual, UpdateParameter(HI_EDGINTON_VALUE_ORIGIN_ID)); + public override bool ApplyTo(Individual individual) => applyTo(individual, UpdateParameter); - public override bool ApplyForPopulationTo(Individual individual) => applyTo(individual, UpdateParameterValue); + public override bool ApplyForPopulationTo(Individual individual) => applyTo(individual, x=>UpdateParameterValue); - private bool applyTo(Individual individual, Action updateParameterFunc) + private bool applyTo(Individual individual, Func> updateParameterFunc) { - updateBloodFlowsAndVolumes(individual, updateParameterFunc); - updateGFR(individual, updateParameterFunc); - updateOntogenyFactory(individual, updateParameterFunc); - updateHematocrit(individual, updateParameterFunc); + updateBloodFlowsAndVolumes(individual, updateParameterFunc(HI_JOHNSON_VALUE_ORIGIN_ID)); + updateGFR(individual, updateParameterFunc(HI_EDGINTON_VALUE_ORIGIN_ID)); + updateOntogenyFactory(individual, updateParameterFunc(HI_EDGINTON_VALUE_ORIGIN_ID)); + updateHematocrit(individual, updateParameterFunc(HI_EDGINTON_VALUE_ORIGIN_ID)); return true; } diff --git a/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs b/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs index d33b8fce6..81b4eb6f0 100644 --- a/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs +++ b/tests/PKSim.Tests/IntegrationTests/HIDiseaseStateImplementationSpecs.cs @@ -158,7 +158,7 @@ public void should_return_the_expected_values_for_gfr_spec() [Observation] public void should_return_the_expected_values_for_hct() { - _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.387, 1e-3); + _individual.Organism.Parameter(HCT).ValueInDisplayUnit.ShouldBeEqualTo(0.3897, 1e-3); } [Observation]