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; }
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); }
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); }