protected override void Context() { base.Context(); _simulation = new IndividualSimulation { DataRepository = new DataRepository() }; _baseGrid = new BaseGrid("Time", DomainHelperForSpecs.TimeDimensionForSpecs()) { Values = new[] { 10f, 20f, 30f } }; _dataColumn1 = new DataColumn("C1", DomainHelperForSpecs.ConcentrationDimensionForSpecs(), _baseGrid) { DataInfo = { Origin = ColumnOrigins.Calculation }, QuantityInfo = { Path = new[] { "C1", "Concentration" } }, Values = new[] { 11f, 21f, 31f } }; _dataColumn2 = new DataColumn("C2", DomainHelperForSpecs.ConcentrationDimensionForSpecs(), _baseGrid) { DataInfo = { Origin = ColumnOrigins.Calculation }, QuantityInfo = { Path = new[] { "C2", "Concentration" } }, Values = new[] { 12f, 22f, 32f } }; _simulation.DataRepository.Add(_dataColumn1); _simulation.DataRepository.Add(_dataColumn2); //Setup global PK analysis _globalPKAnalysis = new GlobalPKAnalysis(); var c1Container = new Container().WithName("C1"); c1Container.Add(DomainHelperForSpecs.ConstantParameterWithValue(0.5).WithName(CoreConstants.PKAnalysis.FractionAbsorbed)); var c2Container = new Container().WithName("C2"); c2Container.Add(DomainHelperForSpecs.ConstantParameterWithValue(1).WithName(CoreConstants.PKAnalysis.FractionAbsorbed)); _globalPKAnalysis.Add(c1Container); _globalPKAnalysis.Add(c2Container); _pkC1 = new PKAnalysis { DomainHelperForSpecs.ConstantParameterWithValue(1).WithName(Constants.PKParameters.MRT), DomainHelperForSpecs.ConstantParameterWithValue(2).WithName(Constants.PKParameters.Tmax) }; _pkC2 = new PKAnalysis { DomainHelperForSpecs.ConstantParameterWithValue(3).WithName(Constants.PKParameters.MRT), DomainHelperForSpecs.ConstantParameterWithValue(4).WithName(Constants.PKParameters.Tmax) }; A.CallTo(() => _pkMapper.MapFrom(_dataColumn1, A <PKValues> ._, A <PKParameterMode> ._, "C1")).Returns(_pkC1); A.CallTo(() => _pkMapper.MapFrom(_dataColumn2, A <PKValues> ._, A <PKParameterMode> ._, "C2")).Returns(_pkC2); _defaultNumberOfRules = DomainHelperForSpecs.ConstantParameterWithValue(3).Rules.Count; }
protected override void Context() { _representationInfoRepository = A.Fake <IRepresentationInfoRepository>(); sut = new GlobalPKAnalysisToDataTableMapper(_representationInfoRepository); _globalPKAnalysis = new GlobalPKAnalysis(); _compound1 = new Container().WithName("Drug"); _compound2 = new Container().WithName("Inhibitor"); _globalPKAnalysis.Add(_compound1); _globalPKAnalysis.Add(_compound2); _compound1.Add(DomainHelperForSpecs.ConstantParameterWithValue(1).WithName("P1")); _compound1.Add(DomainHelperForSpecs.ConstantParameterWithValue(2).WithName("P2")); _compound2.Add(DomainHelperForSpecs.ConstantParameterWithValue(3).WithName("P1")); _compound2.Add(DomainHelperForSpecs.ConstantParameterWithValue(4).WithName("P3")); A.CallTo(() => _representationInfoRepository.InfoFor(A <IParameter> ._)) .ReturnsLazily(x => new RepresentationInfo { DisplayName = "Display for " + x.GetArgument <IParameter>(0).Name }); }
public static GlobalPKAnalysis GenerateGlobalPKAnalysis(string drugName) { var globalPKAnalysis = new GlobalPKAnalysis(); var container = new Container().WithName(drugName); globalPKAnalysis.Add(container); container.AddChildren( new PKSimParameter { Name = Constants.PKParameters.Vd, Value = 0.0 }, new PKSimParameter { Name = Constants.PKParameters.Vss, Value = 0.0 }); return(globalPKAnalysis); }
public GlobalPKAnalysis CalculateGlobalPKAnalysisFor(IEnumerable <Simulation> simulations) { var globalPKAnalysis = new GlobalPKAnalysis(); var allSimulations = simulations.ToList(); if (allSimulations.Count != 1) { return(globalPKAnalysis); } var simulation = allSimulations[0] as IndividualSimulation; if (simulation == null) { return(globalPKAnalysis); } //one container per compound foreach (var compound in simulation.Compounds) { var compoundName = compound.Name; var container = new Container().WithName(compoundName); globalPKAnalysis.Add(container); var peripheralVenousBloodCurve = simulation.DataRepository.PeripheralVenousBloodColumn(compoundName); var venousBloodCurve = simulation.DataRepository.VenousBloodColumn(compoundName); if (peripheralVenousBloodCurve == null || venousBloodCurve == null) { continue; } var options = _pkCalculationOptionsFactory.CreateFor(simulation, compoundName); var venousBloodPlasmaPK = _pkAnalysisTask.CalculatePK(venousBloodCurve, options); var aucIV = simulation.AucIVFor(compoundName); var aucDDI = simulation.AucDDIFor(compoundName); var cmaxDDI = simulation.CmaxDDIFor(compoundName); var bioAvailability = createRatioParameter(CoreConstants.PKAnalysis.Bioavailability, venousBloodPlasmaPK[Constants.PKParameters.AUC_inf], aucIV, Constants.Dimension.DIMENSIONLESS); var bioAvailabilityValue = bioAvailability.Value; var bloodCurveForPKAnalysis = bloodCurveForSpecies(peripheralVenousBloodCurve, venousBloodCurve, simulation.Individual); var bloodPlasmaPK = _pkAnalysisTask.CalculatePK(bloodCurveForPKAnalysis, options); var applicationType = applicationTypeFor(simulation, compound); var aucRatio = createRatioParameter(CoreConstants.PKAnalysis.AUCRatio, bloodPlasmaPK[pkParameterNameForAUCRatio(applicationType)], aucDDI, Constants.Dimension.DIMENSIONLESS); var cmaxRatio = createRatioParameter(CoreConstants.PKAnalysis.C_maxRatio, bloodPlasmaPK[pkParameterNameForCmaxRatio(applicationType)], cmaxDDI, Constants.Dimension.DIMENSIONLESS); var vssPlasma = createParameter(CoreConstants.PKAnalysis.VssPlasma, bloodPlasmaPK[Constants.PKParameters.Vss], CoreConstants.Dimension.VolumePerBodyWeight); var vssPlasmaOverF = createParameter(CoreConstants.PKAnalysis.VssPlasmaOverF, bloodPlasmaPK[Constants.PKParameters.Vss], CoreConstants.Dimension.VolumePerBodyWeight); var vdPlasma = createParameter(CoreConstants.PKAnalysis.VdPlasma, bloodPlasmaPK[Constants.PKParameters.Vd], CoreConstants.Dimension.VolumePerBodyWeight); var vdPlasmaOverF = createParameter(CoreConstants.PKAnalysis.VdPlasmaOverF, bloodPlasmaPK[Constants.PKParameters.Vd], CoreConstants.Dimension.VolumePerBodyWeight); var vssPhysChem = createParameter(CoreConstants.PKAnalysis.VssPhysChem, calculateVSSPhysChemFor(simulation, compoundName), CoreConstants.Dimension.VolumePerBodyWeight); var totalPlasmaCL = createParameter(CoreConstants.PKAnalysis.TotalPlasmaCL, bloodPlasmaPK[Constants.PKParameters.CL], CoreConstants.Dimension.FlowPerWeight); var totalPlasmaCLOverF = createParameter(CoreConstants.PKAnalysis.TotalPlasmaCLOverF, bloodPlasmaPK[Constants.PKParameters.CL], CoreConstants.Dimension.FlowPerWeight); if (_interactionTask.HasInteractionInvolving(compound, simulation)) { container.AddChildren(aucRatio, cmaxRatio); } var fractionAbsorbed = fractionAbsorbedFor(simulation, compoundName); //multiple application or no application? in that case, only show fraction absorbed for oral if (applicationType != ApplicationType.Single) { if (isMultipleOral(simulation, compound)) { container.Add(fractionAbsorbed); } continue; } var schemaItem = singleDosingItem(simulation, compound); var pkValues = new List <IParameter>(); var bioAvailabilityCalculated = !double.IsNaN(bioAvailabilityValue); if (isIntravenous(schemaItem)) { container.AddChildren(vssPlasma, vdPlasma, vssPhysChem, totalPlasmaCL); continue; } var fractionAbsorbedWarningParameters = new List <IParameter>(); if (bioAvailabilityCalculated) { vssPlasma.Value *= bioAvailabilityValue; vdPlasma.Value *= bioAvailabilityValue; totalPlasmaCL.Value *= bioAvailabilityValue; fractionAbsorbedWarningParameters.AddRange(new[] { vssPlasma, vdPlasma }); pkValues.AddRange(new[] { vssPlasma, vdPlasma, totalPlasmaCL, bioAvailability }); } else { fractionAbsorbedWarningParameters.AddRange(new[] { vssPlasmaOverF, vdPlasmaOverF }); pkValues.AddRange(new[] { vssPlasmaOverF, vdPlasmaOverF, totalPlasmaCLOverF, bioAvailability }); } if (isOral(schemaItem)) { fractionAbsorbed.Rules.Add(fractionAbsorbedRule); pkValues.Add(fractionAbsorbed); if (bioAvailability.Value > fractionAbsorbed.Value) { bioAvailability.Rules.Add(bioAvailabilityRule); } addFractionAbsorvedWarningTo(fractionAbsorbed, fractionAbsorbedWarningParameters); } container.AddChildren(pkValues); } return(globalPKAnalysis); }