Beispiel #1
0
        /// <summary>
        /// Checks whether the two population data added together are equal with this.
        /// </summary>
        /// <param name="data1">First datapoint.</param>
        /// <param name="data2">Second datapoint.</param>
        /// <returns>Maximum deviation in one of the sum, <c>0</c> if equal.</returns>
        public Int32 SumError(PopulationDataPoint data1, PopulationDataPoint data2)
        {
            var sum = new PopulationDataPoint();

            if (data1 != null)
            {
                sum.Add(data1);
            }
            if (data2 != null)
            {
                sum.Add(data2);
            }
            return(this.MaxDeviation(sum));
        }
Beispiel #2
0
        /// <summary>
        /// Checks whether the <see cref="agetable"/> fits to self.
        /// </summary>
        /// <returns><c>true</c> if age table if valid, <c>false</c> otherwise.</returns>
        /// <remarks>Also returns <c>true</c> if there is no age table.</remarks>
        public Boolean AgeTableValid()
        {
            var result = true;

            if (agetable != null && agetable.age.Any())
            {
                var ageSum = new PopulationDataPoint();
                foreach (var ageEntry in agetable.age)
                {
                    ageSum.Add(ageEntry);
                }
                ageSum.Add(agetable.unknown);
                result &= ageSum.IsEqual(this);
            }

            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Calculates the maximum deviation of the sum of the partial data point.
        /// </summary>
        /// <returns>Maximum deviation, <c>0</c> if all parts sum up correctly.</returns>
        public Int32 SumError()
        {
            Int32 maxError  = 0;
            var   validData = data.Where(x => x.valid);
            // DOPA data can contain more than one municipal entry with different geocodes
            PopulationDataPoint municipal = null;
            var municipalData             = validData.Where(x => x.type == PopulationDataType.municipal);

            if (municipalData.Any())
            {
                municipal = new PopulationDataPoint();
                foreach (var dataPoint in municipalData)
                {
                    municipal.Add(dataPoint);
                }
            }
            var rural = validData.FirstOrDefault(x => x.type == PopulationDataType.nonmunicipal);

            if ((municipal != null) && (rural != null))
            {
                maxError = Math.Max(maxError, TotalPopulation.SumError(municipal, rural));
            }
            var collectivehouseholds = validData.FirstOrDefault(x => x.type == PopulationDataType.collectivehouseholds);
            var privatehouseholds    = validData.FirstOrDefault(x => x.type == PopulationDataType.privatehouseholds);

            if ((collectivehouseholds != null) && (privatehouseholds != null))
            {
                maxError = Math.Max(maxError, TotalPopulation.SumError(collectivehouseholds, privatehouseholds));
            }
            var agricultural    = validData.FirstOrDefault(x => x.type == PopulationDataType.agricultural);
            var nonagricultural = validData.FirstOrDefault(x => x.type == PopulationDataType.nonagricultural);

            if ((agricultural != null) && (nonagricultural != null))
            {
                maxError = Math.Max(maxError, TotalPopulation.SumError(agricultural, nonagricultural));
            }
            var sanitary      = validData.FirstOrDefault(x => x.type == PopulationDataType.sanitary);
            var urbanSanitary = validData.FirstOrDefault(x => x.type == PopulationDataType.urbansanitary);
            var ruralSanitary = validData.FirstOrDefault(x => x.type == PopulationDataType.ruralsanitary);

            if ((urbanSanitary != null) && (ruralSanitary != null) && (sanitary != null))
            {
                maxError = Math.Max(maxError, sanitary.SumError(urbanSanitary, ruralSanitary));
            }

            var thai      = validData.FirstOrDefault(x => x.type == PopulationDataType.thai);
            var foreigner = validData.FirstOrDefault(x => x.type == PopulationDataType.foreigner);

            if ((thai != null) && (foreigner != null))
            {
                maxError = Math.Max(maxError, TotalPopulation.SumError(thai, foreigner));
            }

            return(maxError);
        }
Beispiel #4
0
 /// <summary>
 /// Checks whether the two population data added together are equal with this.
 /// </summary>
 /// <param name="data1">First datapoint.</param>
 /// <param name="data2">Second datapoint.</param>
 /// <returns>Maximum deviation in one of the sum, <c>0</c> if equal.</returns>
 public Int32 SumError(PopulationDataPoint data1, PopulationDataPoint data2)
 {
     var sum = new PopulationDataPoint();
     if ( data1 != null )
     {
         sum.Add(data1);
     }
     if ( data2 != null )
     {
         sum.Add(data2);
     }
     return this.MaxDeviation(sum);
 }