protected override void Context()
        {
            base.Context();
            _normalDistribution1 = new ParameterDistributionMetaData {
                Age = 20, Mean = 5, Deviation = 10
            };
            _normalDistribution2 = new ParameterDistributionMetaData {
                Age = 10, Mean = 15, Deviation = 30
            };
            _normalDistributions = new List <ParameterDistributionMetaData> {
                _normalDistribution1, _normalDistribution2
            };
            _parameter = A.Fake <IDistributedParameter>();

            IParameter meanParameter      = DomainHelperForSpecs.ConstantParameterWithValue(1).WithName("Mean");
            IParameter deviationParameter = DomainHelperForSpecs.ConstantParameterWithValue(2).WithName("Deviation");

            A.CallTo(() => _parameter.MeanParameter).Returns(meanParameter);
            A.CallTo(() => _parameter.DeviationParameter).Returns(deviationParameter);
            A.CallTo(() => _distrFormulaFactory.CreateNormalDistributionFormulaFor(_parameter, meanParameter, deviationParameter)).Returns(new NormalDistributionFormula());

            _originData = new OriginData {
                Age = 12
            };
        }
 bool isElderlyICRPVolumeParameterIn(ParameterDistributionMetaData pd, string organ)
 {
     return(pd.Population.Equals(CoreConstants.Population.ICRP) &&
            pd.Age >= 40 &&
            pd.ParameterName.Equals("Volume") &&
            pd.ContainerType.Equals(CoreConstants.ContainerType.ORGAN) &&
            pd.ContainerName.Equals(organ));
 }
예제 #3
0
        private void scaleDistributionMetaData(ParameterDistributionMetaData parameterDistributionMeta, double hrel, double alpha)
        {
            var scale = Math.Pow(hrel, alpha);

            parameterDistributionMeta.Mean *= scale;
            if (parameterDistributionMeta.DistributionType == CoreConstants.Distribution.Normal)
            {
                parameterDistributionMeta.Deviation *= scale;
            }
        }
        protected override void Context()
        {
            _entityPathResolver   = A.Fake <IEntityPathResolver>();
            _parameterFactory     = A.Fake <IParameterFactory>();
            _objectBaseFactory    = A.Fake <IObjectBaseFactory>();
            _distributedParameter = A.Fake <IDistributedParameter>();
            A.CallTo(() => _parameterFactory.CreateFor(A <ParameterDistributionMetaData> ._))
            .Invokes(x => _distributionMetaData = x.GetArgument <ParameterDistributionMetaData>(0)).Returns(_distributedParameter);

            sut = new AdvancedParameterFactory(_entityPathResolver, _parameterFactory, _objectBaseFactory);
        }
        private IEnumerable <ParameterDistributionMetaData> scaleDistributions(TableFormulaParameter <IDistributedParameter> parameter, IEnumerable <ParameterDistributionMetaData> distributionsToScale)
        {
            //Retrieve the mean height parameter for the given origin data
            var originData          = parameter.OriginData;
            var individualParameter = parameter.Parameter;

            bool needHeightScaling = needScaling(originData, individualParameter);

            if (!needHeightScaling)
            {
                return(distributionsToScale);
            }

            //retrieve the height distribution for the original individual
            var heightDistributions = allDistributionsFor(_allHeightDistributionMaleParameters, _allHeightDistributionFemaleParameters, originData).ToList();

            var heightDistributionParameters = distributionParametersFor(heightDistributions, originData);

            double meanHeight = heightDistributionParameters.Item1;
            double deviation  = heightDistributionParameters.Item2;
            var    heigthDistributionFormula = distributionFrom(DistributionTypes.Normal, meanHeight, deviation);

            double currentHeight = originData.Height.GetValueOrDefault(meanHeight);

            //same height, not need to scale
            if (ValueComparer.AreValuesEqual(meanHeight, currentHeight))
            {
                return(distributionsToScale);
            }

            //is used in order to retrieve the percentile
            double currentPercentile = heigthDistributionFormula.CalculatePercentileForValue(currentHeight);
            double alpha             = individualParameter.ParentContainer.Parameter(CoreConstants.Parameter.ALLOMETRIC_SCALE_FACTOR).Value;

            var currentOriginData = originData.Clone();
            var scaledParameterDistributionMetaData = new List <ParameterDistributionMetaData>();

            foreach (var originDistributionMetaData in distributionsToScale)
            {
                var distributionMetaData = ParameterDistributionMetaData.From(originDistributionMetaData);
                currentOriginData.Age = originDistributionMetaData.Age;
                double hrelForAge = calculateRelativeHeightForAge(heightDistributions, currentOriginData, currentPercentile);

                scaleDistributionMetaData(distributionMetaData, hrelForAge, alpha);
                scaledParameterDistributionMetaData.Add(distributionMetaData);
            }

            return(scaledParameterDistributionMetaData);
        }
 protected override void Context()
 {
     base.Context();
     _normalDistribution1 = new ParameterDistributionMetaData();
     _normalDistribution1.DistributionType = CoreConstants.Distribution.Normal;
     _normalDistribution2 = new ParameterDistributionMetaData();
     _normalDistribution2.DistributionType = CoreConstants.Distribution.Normal;
     _logNormalDistribution = new ParameterDistributionMetaData();
     _logNormalDistribution.DistributionType = CoreConstants.Distribution.LogNormal;
     _onlyNormalDistributions = new List <ParameterDistributionMetaData> {
         _normalDistribution1, _normalDistribution2
     };
     _mixedDistributions = new List <ParameterDistributionMetaData> {
         _normalDistribution1, _logNormalDistribution
     };
 }
예제 #7
0
        private IReadOnlyList <ParameterDistributionMetaData> scaleDistributions(TableFormulaParameter <IDistributedParameter> parameter, IReadOnlyList <ParameterDistributionMetaData> distributionsToScale)
        {
            //Retrieve the mean height parameter for the given origin data
            var originData          = parameter.OriginData;
            var individualParameter = parameter.Parameter;

            bool needHeightScaling = needScaling(originData, individualParameter);

            if (!needHeightScaling)
            {
                return(distributionsToScale);
            }

            var(meanHeight, currentHeight, currentPercentile, heightDistributionSamples) = heightDistributionsFor(originData);

            //same height, not need to scale
            if (ValueComparer.AreValuesEqual(meanHeight, currentHeight))
            {
                return(distributionsToScale);
            }

            //is used in order to retrieve the percentile
            double alpha = individualParameter.ParentContainer.Parameter(CoreConstants.Parameters.ALLOMETRIC_SCALE_FACTOR).Value;

            var currentOriginData = originData.Clone();
            var scaledParameterDistributionMetaData = new List <ParameterDistributionMetaData>();

            foreach (var originDistributionMetaData in distributionsToScale)
            {
                var distributionMetaData = ParameterDistributionMetaData.From(originDistributionMetaData);
                currentOriginData.Age.Value = originDistributionMetaData.Age;

                var(mean, deviation) = heightDistributionSamples(currentOriginData);
                double heightAtPercentile = valueFrom(DistributionTypes.Normal, mean, deviation, currentPercentile);
                double hrelForAge         = heightAtPercentile / mean;

                scaleDistributionMetaData(distributionMetaData, hrelForAge, alpha);
                scaledParameterDistributionMetaData.Add(distributionMetaData);
            }

            return(scaledParameterDistributionMetaData);
        }
예제 #8
0
        protected override void Context()
        {
            base.Context();
            _discreteDistribution1 = new ParameterDistributionMetaData {
                Age = 20, Mean = 5
            };
            _discreteDistribution2 = new ParameterDistributionMetaData {
                Age = 10, Mean = 15
            };
            _discreteDistributions = new List <ParameterDistributionMetaData> {
                _discreteDistribution1, _discreteDistribution2
            };
            _parameter = A.Fake <IDistributedParameter>();
            var meanParameter = DomainHelperForSpecs.ConstantParameterWithValue(1).WithName("Mean");

            A.CallTo(() => _parameter.MeanParameter).Returns(meanParameter);

            _originData = new OriginData {
                Age = 12
            };
            A.CallTo(() => _distrFormulaFactory.CreateDiscreteDistributionFormulaFor(_parameter, meanParameter)).Returns(new DiscreteDistributionFormula());
        }
예제 #9
0
        protected override void Context()
        {
            _compartment = A.Fake <Compartment>();
            A.CallTo(() => _compartment.OrganName).Returns("MyParentOrgan");
            _compartment.Name = "MyComp";
            var containerPath = new ObjectPath(new[] { _compartment.OrganName, _compartment.Name }).ToString();

            _containerPathRetriever = A.Fake <IEntityPathResolver>();
            A.CallTo(() => _containerPathRetriever.PathFor(_compartment)).Returns(containerPath);
            _originData            = new OriginData();
            _originData.Population = new SpeciesPopulation();
            var distributionDefinition = new ParameterDistributionMetaData();
            var rateDefinition         = new ParameterRateMetaData();
            var valueDefinition        = new ParameterValueMetaData();

            distributionDefinition.ParameterName = "tutu";
            var distributionRepository = A.Fake <IParameterDistributionRepository>();

            A.CallTo(() => distributionRepository.AllFor(containerPath)).Returns(new List <ParameterDistributionMetaData> {
                distributionDefinition
            });

            var rateRepository = A.Fake <IParameterRateRepository>();

            A.CallTo(() => rateRepository.AllFor(containerPath)).Returns(new List <ParameterRateMetaData> {
                rateDefinition
            });

            var valueRepository = A.Fake <IParameterValueRepository>();

            A.CallTo(() => valueRepository.AllFor(containerPath)).Returns(new List <ParameterValueMetaData> {
                valueDefinition
            });

            sut = new ParameterQuery(distributionRepository, valueRepository, rateRepository, _containerPathRetriever);
        }
 protected override void Because()
 {
     _copy = ParameterDistributionMetaData.From(sut);
 }
예제 #11
0
 private double valueFrom(ParameterDistributionMetaData distributionMetaData, double percentile)
 {
     return(valueFrom(distributionMetaData.Distribution, distributionMetaData.Mean, distributionMetaData.Deviation, percentile));
 }