public DistributedParameterValue[] DistributionsFor(OriginData batchOriginData, IEnumerable <MoleculeOntogeny> moleculeOntogenies)
        {
            var originData = _originDataMapper.MapFrom(batchOriginData);
            var individual = _individualFactory.CreateAndOptimizeFor(originData);

            return(individual.GetAllChildren <IDistributedParameter>().Select(distributedParameterValueFrom).ToArray());
        }
        public ParameterValue[] CreateIndividual(OriginData batchOriginData, IEnumerable <MoleculeOntogeny> moleculeOntogenies)
        {
            var originData              = _originDataMapper.MapFrom(batchOriginData);
            var individual              = _individualFactory.CreateAndOptimizeFor(originData);
            var individualProperties    = _individualPropertiesMapper.MapFrom(individual);
            var allIndividualParameters = individualProperties.ParameterValues.ToList();

            allIndividualParameters.AddRange(_ontogenyFactorsRetriever.FactorsFor(originData, moleculeOntogenies));
            return(allIndividualParameters.ToArray());
        }
 protected override void Context()
 {
     base.Context();
     _batchOriginData            = new OriginData();
     _batchOriginData.Species    = CoreConstants.Species.Human;
     _batchOriginData.Population = CoreConstants.Population.ICRP;
     _batchOriginData.Age        = 30;
     _batchOriginData.Weight     = 75;
     _batchOriginData.Height     = 17.5;
     _batchOriginData.Gender     = CoreConstants.Gender.Male;
 }
示例#4
0
 protected override void Context()
 {
     _speciesRepository   = A.Fake <ISpeciesRepository>();
     _originDataTask      = A.Fake <IOriginDataTask>();
     _individualModelTask = A.Fake <IIndividualModelTask>();
     _male   = new Gender().WithName(CoreConstants.Gender.Male);
     _female = new Gender().WithName(CoreConstants.Gender.Female);
     _human  = new Species().WithName(CoreConstants.Species.Human);
     _icrp   = new SpeciesPopulation {
         IsHeightDependent = true, IsAgeDependent = true
     }.WithName(CoreConstants.Population.ICRP);
     _anotherPop = new SpeciesPopulation().WithName("Another Pop");
     _cmForHuman = new CalculationMethod();
     _cmForHuman.AddSpecies(_human.Name);
     _icrp.AddGender(_male);
     _human.AddPopulation(_icrp);
     _category = new CalculationMethodCategory();
     _category.Add(_cmForHuman);
     A.CallTo(() => _speciesRepository.All()).Returns(new[] { _human });
     A.CallTo(() => _originDataTask.AllCalculationMethodCategoryFor(_human)).Returns(new[] { _category });
     _batchOriginData = new OriginData();
     sut = new OriginDataMapper(_speciesRepository, _originDataTask, _individualModelTask);
 }
示例#5
0
        public Model.OriginData MapFrom(BatchOriginData batchOriginData)
        {
            var originData = new Model.OriginData();
            var species    = _speciesRepository.FindByName(batchOriginData.Species);

            if (species == null)
            {
                throw new PKSimException(PKSimConstants.Error.CouldNotFindSpecies(batchOriginData.Species, _speciesRepository.AllNames()));
            }

            originData.Species = species;

            var population = species.PopulationByName(batchOriginData.Population);

            if (population == null)
            {
                if (string.IsNullOrEmpty(batchOriginData.Population) && species.Populations.Count() == 1)
                {
                    population = species.Populations.ElementAt(0);
                }
                else
                {
                    throw new PKSimException(PKSimConstants.Error.CouldNotFindPopulationForSpecies(batchOriginData.Population, batchOriginData.Species, species.Populations.AllNames()));
                }
            }

            originData.SpeciesPopulation = population;

            var gender = population.GenderByName(batchOriginData.Gender);

            if (gender == null)
            {
                if (string.IsNullOrEmpty(batchOriginData.Gender))
                {
                    gender = population.Genders.ElementAt(0);
                }
                else
                {
                    throw new PKSimException(PKSimConstants.Error.CouldNotFindGenderForPopulation(batchOriginData.Gender, batchOriginData.Population, population.Genders.AllNames()));
                }
            }

            originData.Gender = gender;
            //this is not defined in matlab yet
            originData.SubPopulation = _originDataTask.DefaultSubPopulationFor(species);

            if (originData.SpeciesPopulation.IsAgeDependent)
            {
                originData.Age = batchOriginData.Age;
                var meanAgeParameter = _individualModelTask.MeanAgeFor(originData);
                originData.Age                = valueFrom(batchOriginData.Age, meanAgeParameter.Value);
                originData.AgeUnit            = meanAgeParameter.Dimension.BaseUnit.Name;
                originData.GestationalAge     = valueFrom(batchOriginData.GestationalAge, CoreConstants.NOT_PRETERM_GESTATIONAL_AGE_IN_WEEKS);
                originData.GestationalAgeUnit = CoreConstants.Units.Weeks;
            }

            var calculationMethodCategoryForSpecies = _originDataTask.AllCalculationMethodCategoryFor(species);

            foreach (var category in calculationMethodCategoryForSpecies)
            {
                string selectedCalculationMethod = batchOriginData.CalculationMethodFor(category.Name);
                if (string.IsNullOrEmpty(selectedCalculationMethod))
                {
                    originData.AddCalculationMethod(category.DefaultItemForSpecies(species));
                }
                else
                {
                    var calculationMethod = category.AllItems().FindByName(selectedCalculationMethod);
                    if (calculationMethod == null)
                    {
                        throw new PKSimException(PKSimConstants.Error.CouldNotFindCalculationMethodInCategory(selectedCalculationMethod, category.Name, category.AllItems().AllNames()));
                    }
                    if (calculationMethod.AllSpecies.Contains(species.Name))
                    {
                        originData.AddCalculationMethod(calculationMethod);
                    }
                    else
                    {
                        throw new PKSimException(PKSimConstants.Error.CalculationMethodIsNotDefinedForSpecies(selectedCalculationMethod, category.Name, species.Name));
                    }
                }
            }

            var meanWeightParameter = _individualModelTask.MeanWeightFor(originData);

            originData.Weight     = valueFrom(batchOriginData.Weight, meanWeightParameter.Value).Value;
            originData.WeightUnit = meanWeightParameter.Dimension.BaseUnit.Name;

            if (originData.SpeciesPopulation.IsHeightDependent)
            {
                var meanHeightParameter = _individualModelTask.MeanHeightFor(originData);
                originData.Height     = valueFrom(batchOriginData.Height, meanHeightParameter.Value);
                originData.HeightUnit = meanHeightParameter.Dimension.BaseUnit.Name;
            }

            return(originData);
        }