コード例 #1
0
        protected virtual PopulationSimulationPKAnalyses CalculateFor(IModelCoreSimulation simulation, SimulationResults runResults, Action <int> performIndividualScalingAction)
        {
            _lazyLoadTask.Load(simulation as ILazyLoadable);

            var popAnalyses = new PopulationSimulationPKAnalyses();

            foreach (var selectedQuantityForMolecule in simulation.OutputSelections.GroupBy(moleculeNameFrom))
            {
                var moleculeName             = selectedQuantityForMolecule.Key;
                var pkCalculationOptions     = _pkCalculationOptionsFactory.CreateFor(simulation, moleculeName);
                var allApplicationParameters = simulation.AllApplicationParametersOrderedByStartTimeFor(moleculeName);

                foreach (var selectedQuantity in selectedQuantityForMolecule)
                {
                    addPKParametersForOutput(simulation, runResults, performIndividualScalingAction, selectedQuantity, popAnalyses, moleculeName, pkCalculationOptions, allApplicationParameters);
                }
            }

            return(popAnalyses);
        }
コード例 #2
0
        public PKCalculationOptions CreateFor(IModelCoreSimulation simulation, string moleculeName)
        {
            var options = new PKCalculationOptions();
            var endTime = (simulation.EndTime ?? 0).ToFloat();

            var allApplicationParameters = simulation.AllApplicationParametersOrderedByStartTimeFor(moleculeName);

            // all application start times starting before the end of the simulation
            var applicationStartTimes = allApplicationParameters.Select(x => x.StartTime.Value).ToFloatArray();
            var applicationEndTimes   = new List <float>(applicationStartTimes.Skip(1))
            {
                endTime
            };


            for (int i = 0; i < applicationStartTimes.Length; i++)
            {
                var dosingInterval = new DosingInterval
                {
                    StartValue = applicationStartTimes[i],
                    EndValue   = applicationEndTimes[i]
                };

                options.AddInterval(dosingInterval);
            }

            // single dosing
            if (applicationStartTimes.Length <= 1)
            {
                options.InfusionTime = allApplicationParameters.FirstOrDefault()?.InfusionTime?.Value;
            }

            // Once all dosing are defined, update total drug mass
            UpdateTotalDrugMassPerBodyWeight(simulation, moleculeName, options, allApplicationParameters);

            return(options);
        }