示例#1
0
        public ICommand ExtractIndividualsFromPopulationCommand(Population population, IndividualExtractionOptions individualExtractionOptions)
        {
            if (population.IsAnImplementationOf <MoBiPopulation>())
            {
                throw new PKSimException(PKSimConstants.Error.CannotExtractIndividualFrom(_executionContext.TypeFor(population)));
            }

            var allPopulationParameters = population.AllVectorialParameters(_entityPathResolver).ToList();

            var allDistributedParameters = allPopulationParameters.Where(x => x.Formula.IsDistributed()).ToList();
            var allConstantParameters    = allPopulationParameters.Where(x => x.Formula.IsConstant()).ToList();
            var allRemainingParameters   = allPopulationParameters.Except(allConstantParameters).Except(allDistributedParameters);

            //Update constant parameters first, then distributed and last all others. This ensures that formula parameters in the extracted individuals are not updated with a constant value
            var allParametersOrderedByFormulaType = allConstantParameters.Union(allDistributedParameters).Union(allRemainingParameters).ToList();

            var addCommands = individualExtractionOptions.IndividualIds.Distinct()
                              .Select(individualId => extractIndividualFrom(population, individualId, allParametersOrderedByFormulaType, individualExtractionOptions))
                              .ToList();

            var overallCommand = new PKSimMacroCommand
            {
                CommandType       = PKSimConstants.Command.CommandTypeAdd,
                ObjectType        = PKSimConstants.ObjectTypes.Population,
                Description       = PKSimConstants.Command.ExtractingIndividualsDescription(population.Name),
                BuildingBlockName = population.Name,
                BuildingBlockType = PKSimConstants.ObjectTypes.Population
            };

            overallCommand.AddRange(addCommands);

            return(overallCommand);
        }
示例#2
0
        private ICommand macroCommandFrom(Population population, ICommand baseCommand, IEnumerable <ICommand> commands)
        {
            var macroCommand = new PKSimMacroCommand
            {
                ObjectType  = baseCommand.ObjectType,
                Description = baseCommand.Description,
                CommandType = baseCommand.CommandType
            };

            macroCommand.AddRange(commands);
            _executionContext.UpdateBuildingBlockPropertiesInCommand(macroCommand, population);
            return(macroCommand);
        }