Ejemplo n.º 1
0
        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
            });
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }