예제 #1
0
        public void should_update_elderly_ICRP_organ_volumes()
        {
            var meanStdRatios = new[]
            {
                new { organ = CoreConstants.Organ.ArterialBlood, maleRatio = 0.05, femaleRatio = 0.05 },
                new { organ = CoreConstants.Organ.Bone, maleRatio = 0.011059, femaleRatio = 0.01 },
                new { organ = CoreConstants.Organ.Gonads, maleRatio = 0.05, femaleRatio = 0.05 },
                new { organ = CoreConstants.Organ.Kidney, maleRatio = 0.24628, femaleRatio = 0.25 },
                new { organ = CoreConstants.Organ.LargeIntestine, maleRatio = 0.14, femaleRatio = 0.14 },
                new { organ = CoreConstants.Organ.Liver, maleRatio = 0.25, femaleRatio = 0.25 },
                new { organ = CoreConstants.Organ.Pancreas, maleRatio = 0.2689, femaleRatio = 0.28 },
                new { organ = CoreConstants.Organ.Skin, maleRatio = 0.05, femaleRatio = 0.05 },
                new { organ = CoreConstants.Organ.VenousBlood, maleRatio = 0.05, femaleRatio = 0.05 }
            };

            foreach (var meanStdRatio in meanStdRatios)
            {
                var volumeParameters = _parameterDistributionRepository.All().Where(pd => isElderlyICRPVolumeParameterIn(pd, meanStdRatio.organ));

                foreach (var volumeParameter in volumeParameters)
                {
                    if (meanStdRatio.organ.Equals(CoreConstants.Organ.Liver) && volumeParameter.Gender.Equals(CoreConstants.Gender.Male))
                    {
                        continue; //no update for this combination
                    }
                    var ratio         = volumeParameter.Deviation / volumeParameter.Mean;
                    var expectedRatio = volumeParameter.Gender.Equals(CoreConstants.Gender.Male) ? meanStdRatio.maleRatio : meanStdRatio.femaleRatio;

                    ratio.ShouldBeEqualTo(expectedRatio, 1e-3, $"{meanStdRatio.organ}.{volumeParameter.Gender}.{volumeParameter.Age} years");
                }
            }
        }
        public void should_update_elderly_ICRP_organ_volumes()
        {
            var meanStdRatios = new[]
            {
                new { organ = ARTERIAL_BLOOD, maleRatio = 0.05, femaleRatio = 0.05 },
                new { organ = BONE, maleRatio = 0.011059, femaleRatio = 0.01 },
                new { organ = GONADS, maleRatio = 0.05, femaleRatio = 0.05 },
                new { organ = KIDNEY, maleRatio = 0.24628, femaleRatio = 0.25 },
                new { organ = LARGE_INTESTINE, maleRatio = 0.14, femaleRatio = 0.14 },
                new { organ = LIVER, maleRatio = 0.25, femaleRatio = 0.25 },
                new { organ = PANCREAS, maleRatio = 0.2689, femaleRatio = 0.28 },
                new { organ = SKIN, maleRatio = 0.05, femaleRatio = 0.05 },
                new { organ = VENOUS_BLOOD, maleRatio = 0.05, femaleRatio = 0.05 }
            };

            foreach (var meanStdRatio in meanStdRatios)
            {
                var volumeParameters = _parameterDistributionRepository.All().Where(pd => isElderlyICRPVolumeParameterIn(pd, meanStdRatio.organ));

                foreach (var volumeParameter in volumeParameters)
                {
                    if (meanStdRatio.organ.Equals(LIVER) && volumeParameter.Gender.Equals(CoreConstants.Gender.MALE))
                    {
                        continue; //no update for this combination
                    }
                    var ratio         = volumeParameter.Deviation / volumeParameter.Mean;
                    var expectedRatio = volumeParameter.Gender.Equals(CoreConstants.Gender.MALE) ? meanStdRatio.maleRatio : meanStdRatio.femaleRatio;

                    ratio.ShouldBeEqualTo(expectedRatio, 1e-3, $"{meanStdRatio.organ}.{volumeParameter.Gender}.{volumeParameter.Age} years");
                }
            }
        }
        public void should_update_nhanes_values()
        {
            var nhanesParams = _parameterDistributionRepository.All().Where(pd => pd.Population.EndsWith("NHANES_1997")).ToList();

            var bwParams     = nhanesParams.Where(p => p.ParameterName.Equals(CoreConstants.Parameters.MEAN_WEIGHT)).ToList();
            var heightParams = nhanesParams.Where(p => p.ParameterName.Equals(CoreConstants.Parameters.MEAN_HEIGHT)).ToList();
            var volumeParams = nhanesParams.Where(p => p.ParameterName.Equals(Constants.Parameters.VOLUME)).ToList();

            //check number of new bw/height/volume parameters
            (bwParams.Count + heightParams.Count + volumeParams.Count).ShouldBeEqualTo(1420);

            //check some height standard deviations
            var teenHeightParams = heightParams.Where(p => p.Age == 13 || p.Age == 15).ToList();

            teenHeightParams.Count.ShouldBeEqualTo(2 * 2 * 3); //2 age groups*2genders*3populations
            teenHeightParams.Each(p => p.Deviation.ShouldBeGreaterThan(0.6));
        }
        public void should_properly_set_some_value_origins()
        {
            var agesWithFilledValueOrigins = new double[] { 0, 1, 5, 10, 15, 30, 40, 50, 60, 70, 80, 90, 100 };
            var icrpParams = _parameterDistributionRepository.All()
                             .Where(p => p.Population.Equals(CoreConstants.Population.ICRP))
                             .Where(p => p.ParameterName.IsOneOf(
                                        Constants.Parameters.VOLUME,
                                        CoreConstants.Parameters.BLOOD_FLOW)).ToList();

            icrpParams.Count.ShouldBeGreaterThanOrEqualTo(agesWithFilledValueOrigins.Length * 2 * 2); //2 Genders * 2 parameters per age

            foreach (var param in icrpParams)
            {
                if (param.Age.IsOneOf(agesWithFilledValueOrigins))
                {
                    param.ValueOrigin.IsUndefined.ShouldBeFalse();
                }
                else
                {
                    param.ValueOrigin.IsUndefined.ShouldBeTrue();
                }
            }
        }
예제 #5
0
 public IEnumerable <ParameterDistributionMetaData> AllParameterDistributionsFor(OriginData originData)
 {
     return(distributedParameterMetaDataFor(_parameterDistributionRepository.All(), originData));
 }