Example #1
0
        //[InlineData(0, 0, 25.540275049115913, 2.226588081204977, 72.2331368696791, 353.04240000000004)]
        public async Task Test_DetailedPassCountStatistics_SiteModelWithSingleTAGFile_FullExtents
            (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove, double totalArea)
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var tagFiles = new[]
            {
                Path.Combine(TestHelper.CommonTestDataPath, "TestTAGFile.tag"),
            };

            var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out _);
            var operation = new PassCountStatisticsOperation();

            var arg = SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget);

            arg.PassCountDetailValues = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
            var passCountDetailResult = await operation.ExecuteAsync(arg);

            passCountDetailResult.Should().NotBeNull();

            // Checks counts and percentages
            long[] expectedCounts = { 755, 442, 663, 1038, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//      long[] expectedCounts = { 93, 687, 68, 385, 57, 598, 65, 986, 52, 63, 0, 0, 0, 0, 0 };
            long expectedCountsSum = 0;

            for (int i = 0; i < expectedCounts.Length; i++)
            {
                expectedCountsSum += (i + 1) * expectedCounts[i];
            }

            // Is sum of counts the same?
            long passCountDetailResultSum = 0;

            for (int i = 0; i < passCountDetailResult.Counts.Length; i++)
            {
                passCountDetailResultSum += (i + 1) * passCountDetailResult.Counts[i];
            }

            passCountDetailResultSum.Should().Be(expectedCountsSum);

            // Are all counts the same and do percentages match?

            long totalCount = passCountDetailResult.Counts.Sum();

            for (int i = 0; i < expectedCounts.Length; i++)
            {
                expectedCounts[i].Should().Be(passCountDetailResult.Counts[i]);
                passCountDetailResult.Percents[i].Should().BeApproximately(100.0 * expectedCounts[i] / (1.0 * totalCount), 0.001);
            }

            // Check summary related fields are zero
            passCountDetailResult.ResultStatus.Should().Be(RequestErrorStatus.OK);
            passCountDetailResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult);
            passCountDetailResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001);
            passCountDetailResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001);
            passCountDetailResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001);
            passCountDetailResult.TotalAreaCoveredSqMeters.Should().BeApproximately(totalArea, 0.000001);
            passCountDetailResult.IsTargetPassCountConstant.Should().BeTrue();
        }
Example #2
0
        public async Task Test_DetailedPassCountStatistics_SiteModelWithSingleCell_FullExtents
            (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove)
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5);
            var operation = new PassCountStatisticsOperation();

            var arg = SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget);

            arg.PassCountDetailValues = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
            var passCountDetailResult = await operation.ExecuteAsync(arg);

            passCountDetailResult.Should().NotBeNull();

            // Checks counts and percentages
            passCountDetailResult.Counts.Sum().Should().Be(1);
            passCountDetailResult.Counts[9].Should().Be(1);
            passCountDetailResult.Percents.Sum().Should().BeApproximately(100.0, 0.000001);
            passCountDetailResult.Percents[9].Should().BeApproximately(100.0, 0.000001);

            // Check summary related fields are zero
            passCountDetailResult.ResultStatus.Should().Be(RequestErrorStatus.OK);
            passCountDetailResult.ReturnCode.Should().Be(MissingTargetDataResultType.PartialResultMissingTarget);
            passCountDetailResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001);
            passCountDetailResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001);
            passCountDetailResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001);
            passCountDetailResult.TotalAreaCoveredSqMeters.Should().BeApproximately(0, 0.000001); // This being zero seems strange...
            passCountDetailResult.IsTargetPassCountConstant.Should().BeTrue();
        }
Example #3
0
        public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleTAGFile_FullExtents_WithPassCountTargetOverrides
            (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove, double totalArea)
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var tagFiles = new[]
            {
                Path.Combine(TestHelper.CommonTestDataPath, "TestTAGFile.tag"),
            };

            var siteModel = DITAGFileAndSubGridRequestsFixture.BuildModel(tagFiles, out _);
            var operation = new PassCountStatisticsOperation();

            var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget));

            passCountSummaryResult.Should().NotBeNull();
            passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK);
            passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult);
            passCountSummaryResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001);
            passCountSummaryResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001);
            passCountSummaryResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001);
            passCountSummaryResult.TotalAreaCoveredSqMeters.Should().BeApproximately(totalArea, 0.000001);
            passCountSummaryResult.IsTargetPassCountConstant.Should().BeTrue();
            passCountSummaryResult.Counts.Should().BeNull();
            passCountSummaryResult.Percents.Should().BeNull();
        }
Example #4
0
        public async Task <JsonResult> GetPassCountDetails([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel      = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);
                var passCountBands = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new PassCountStatisticsOperation();
                    var result    = await operation.ExecuteAsync(
                        new PassCountStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet()
                        {
                            Filters = new[] { new CombinedFilter() }
                        },
                        PassCountDetailValues = passCountBands,
                        Overrides             = overrides
                    }
                        );

                    if (result != null)
                    {
                        string resultString = $"<b>Pass Count Details Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";

                        var anyTwoDigitsNumber = passCountBands.ToList().Find(s => s >= TWO_DIGITS_NUMBER);
                        for (int i = 0; i < passCountBands.Length; i++)
                        {
                            string space = anyTwoDigitsNumber > 0 && passCountBands[i] < TWO_DIGITS_NUMBER ? "&nbsp;&nbsp;" : string.Empty;
                            resultString += $"<b>{space}{passCountBands[i]}</b> - {result.Percents[i]:##0.#0}%<br/>";
                        }

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #5
0
        public async Task <JsonResult> GetPassCountSummary([FromRoute] string siteModelID, [FromBody] OverrideParameters overrides)
        {
            string resultToReturn;

            if (!Guid.TryParse(siteModelID, out var UID))
            {
                resultToReturn = $"<b>Invalid Site Model UID: {siteModelID}</b>";
            }
            else
            {
                var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(UID, false);

                if (siteModel == null)
                {
                    resultToReturn = $"<b>Site model {UID} is unavailable</b>";
                }
                else
                {
                    var sw = new Stopwatch();
                    sw.Start();

                    var operation = new PassCountStatisticsOperation();
                    var result    = await operation.ExecuteAsync(
                        new PassCountStatisticsArgument()
                    {
                        ProjectID = siteModel.ID,
                        Filters   = new FilterSet()
                        {
                            Filters = new[] { new CombinedFilter() }
                        },
                        Overrides = overrides
                    }
                        );

                    if (result != null)
                    {
                        string resultString = $"<b>Pass Count Summary Results (in {sw.Elapsed}) :</b><br/>";
                        resultString += "<b>================================================</b><br/>";
                        resultString += $"<b>Above Pass Count Percentage:</b> {result.AboveTargetPercent}<br/>";
                        resultString += $"<b>Within Pass Count Percentage Range:</b> {result.WithinTargetPercent}<br/>";
                        resultString += $"<b>Below Pass Count Percentage:</b> {result.BelowTargetPercent}<br/>";
                        resultString += $"<b>Total Area Covered in Sq Meters:</b> {result.TotalAreaCoveredSqMeters}<br/>";

                        resultToReturn = resultString;
                    }
                    else
                    {
                        resultToReturn = "<b>No result</b>";
                    }
                }
            }

            return(new JsonResult(resultToReturn));
        }
Example #6
0
        public async Task Test_SummaryPassCountStatistics_EmptySiteModel_FullExtents_NoPassCountTargetOverride()
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var siteModel = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel();
            var operation = new PassCountStatisticsOperation();

            var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, 0, 0));

            passCountSummaryResult.Should().NotBeNull();
            passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.FailedToRequestDatamodelStatistics);
        }
Example #7
0
        public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleCell_FullExtents_NoPassCountTargetOverride()
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5);
            var operation = new PassCountStatisticsOperation();

            var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, 0, 0));

            passCountSummaryResult.Should().NotBeNull();
            passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK);
            passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.PartialResultMissingTarget);
        }
Example #8
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            var request = item as PassCountDetailsRequest;

            if (request == null)
            {
                ThrowRequestTypeCastException <PassCountDetailsRequest>();
            }

            var siteModel = GetSiteModel(request.ProjectUid);

            var filter = ConvertFilter(request.Filter, siteModel);

            var operation = new PassCountStatisticsOperation();
            var passCountDetailsResult = await operation.ExecuteAsync(new PassCountStatisticsArgument()
            {
                ProjectID             = siteModel.ID,
                Filters               = new FilterSet(filter),
                PassCountDetailValues = UpdatePassCounts(request.PassCounts),
                Overrides             = AutoMapperUtility.Automapper.Map <OverrideParameters>(request.Overrides),
                LiftParams            = ConvertLift(request.LiftSettings, request.Filter?.LayerType)
            });

            if (passCountDetailsResult != null)
            {
                if (passCountDetailsResult.ResultStatus == RequestErrorStatus.OK)
                {
                    return(new PassCountDetailedResult(
                               new TargetPassCountRange(
                                   passCountDetailsResult.ConstantTargetPassCountRange.Min,
                                   passCountDetailsResult.ConstantTargetPassCountRange.Max),
                               passCountDetailsResult.IsTargetPassCountConstant,
                               passCountDetailsResult.Percents,
                               passCountDetailsResult.TotalAreaCoveredSqMeters
                               ));
                }

                throw CreateServiceException <DetailedPassCountExecutor>(passCountDetailsResult.ResultStatus);
            }

            throw CreateServiceException <DetailedPassCountExecutor>();
        }
Example #9
0
        public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleCell_FullExtents_WithPassCountTargetOverrides
            (ushort minTarget, ushort maxTarget, double percentBelow, double percentWithin, double percentAbove)
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5);
            var operation = new PassCountStatisticsOperation();

            var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, minTarget, maxTarget));

            passCountSummaryResult.Should().NotBeNull();
            passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK);
            passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult);
            passCountSummaryResult.BelowTargetPercent.Should().BeApproximately(percentBelow, 0.001);
            passCountSummaryResult.AboveTargetPercent.Should().BeApproximately(percentAbove, 0.001);
            passCountSummaryResult.WithinTargetPercent.Should().BeApproximately(percentWithin, 0.001);
            passCountSummaryResult.TotalAreaCoveredSqMeters.Should().BeApproximately(SubGridTreeConsts.DefaultCellSize * SubGridTreeConsts.DefaultCellSize, 0.000001);
            passCountSummaryResult.IsTargetPassCountConstant.Should().BeTrue();
            passCountSummaryResult.Counts.Should().BeNull();
            passCountSummaryResult.Percents.Should().BeNull();
        }
Example #10
0
        public async Task Test_SummaryPassCountStatistics_SiteModelWithSingleCell_FullExtents_NoPassCountTargetOverride_WithMachinePassCountTarget()
        {
            AddClusterComputeGridRouting();
            AddApplicationGridRouting();

            var siteModel = BuildModelForSingleCellPassCount(HEIGHT_INCREMENT_0_5);

            siteModel.MachinesTargetValues[0].TargetPassCountStateEvents.PutValueAtDate(VSS.TRex.Common.Consts.MIN_DATETIME_AS_UTC, 10);

            var operation = new PassCountStatisticsOperation();

            var passCountSummaryResult = await operation.ExecuteAsync(SimplePassCountStatisticsArgument(siteModel, 0, 0));

            passCountSummaryResult.Should().NotBeNull();
            passCountSummaryResult.ResultStatus.Should().Be(RequestErrorStatus.OK);
            passCountSummaryResult.ReturnCode.Should().Be(MissingTargetDataResultType.NoResult);
            passCountSummaryResult.BelowTargetPercent.Should().Be(0);
            passCountSummaryResult.AboveTargetPercent.Should().Be(0);
            passCountSummaryResult.WithinTargetPercent.Should().Be(100);
            passCountSummaryResult.TotalAreaCoveredSqMeters.Should().BeApproximately(SubGridTreeConsts.DefaultCellSize * SubGridTreeConsts.DefaultCellSize, 0.000001);
            passCountSummaryResult.IsTargetPassCountConstant.Should().BeTrue();
            passCountSummaryResult.Counts.Should().BeNull();
            passCountSummaryResult.Percents.Should().BeNull();
        }
Example #11
0
        protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item)
        {
            var request = item as PassCountSummaryRequest;

            if (request == null)
            {
                ThrowRequestTypeCastException <PassCountSummaryRequest>();
            }

            var siteModel = GetSiteModel(request.ProjectUid);

            var filter = ConvertFilter(request.Filter, siteModel);

            var operation = new PassCountStatisticsOperation();
            var passCountSummaryResult = await operation.ExecuteAsync(
                new PassCountStatisticsArgument
            {
                ProjectID  = siteModel.ID,
                Filters    = new FilterSet(filter),
                Overrides  = AutoMapperUtility.Automapper.Map <OverrideParameters>(request.Overrides),
                LiftParams = ConvertLift(request.LiftSettings, request.Filter?.LayerType)
            }
                );

            if (passCountSummaryResult != null)
            {
                if (passCountSummaryResult.ResultStatus == RequestErrorStatus.OK)
                {
                    return(ConvertResult(passCountSummaryResult));
                }

                throw CreateServiceException <SummaryPassCountExecutor>(passCountSummaryResult.ResultStatus);
            }

            throw CreateServiceException <SummaryPassCountExecutor>();
        }
Example #12
0
        public void Test_SummaryPassCountStatistics_Creation()
        {
            var operation = new PassCountStatisticsOperation();

            operation.Should().NotBeNull();
        }