public async Task Test_CellPassesRequest_NoLiftAnalysisOrFilter() { AddApplicationGridRouting(); AddClusterComputeGridRouting(); var baseTime = DateTime.UtcNow; var siteModel = BuildModelForSingleCellLiftAnalysis(baseTime); var request = new CellPassesRequest_ClusterCompute(); var arg = CreateRequestArgument(siteModel); var response = await request.ExecuteAsync(arg, new SubGridSpatialAffinityKey(SubGridSpatialAffinityKey.DEFAULT_SPATIAL_AFFINITY_VERSION_NUMBER_TICKS, arg.ProjectID, arg.OTGCellX, arg.OTGCellY)); //No lift analysis means the cell passes should be treated as one layer response.Should().NotBeNull(); response.ReturnCode.Should().Be(CellPassesReturnCode.DataFound); response.CellPasses.Count.Should().Be(10); for (var idx = 0; idx < 10; idx++) { var mockModifier = idx + 1; var expectedTime = baseTime.AddMinutes(mockModifier); var expectedHeight = 1.0f + mockModifier * 0.5f; var expectedCcv = (short)(10 + 10 * mockModifier); var cellPass = response.CellPasses[idx]; cellPass.LastPassValidCCV.Should().Be(expectedCcv); cellPass.LastPassTime.Should().Be(expectedTime); cellPass.Height.Should().Be(expectedHeight); cellPass.LayersCount.Should().Be(1); } }
public async Task <CellPassesResponse> ExecuteAsync(CellPassesRequestArgument_ApplicationService arg) { var result = new CellPassesResponse() { ReturnCode = CellPassesReturnCode.Error }; if (arg.Filters?.Filters != null && arg.Filters.Filters.Length > 0) { // Prepare the filters for use in cell passes operations. Failure to prepare any filter results in this request terminating if (!arg.Filters.Filters.Select(x => FilterUtilities.PrepareFilterForUse(x, arg.ProjectID)).All(x => x == RequestErrorStatus.OK)) { return(new CellPassesResponse { ReturnCode = CellPassesReturnCode.FailedToPrepareFilter }); } } var siteModel = DIContext.Obtain <ISiteModels>().GetSiteModel(arg.ProjectID); if (siteModel == null) { _log.LogError($"Failed to locate site model {arg.ProjectID}"); return(result); } if (!arg.CoordsAreGrid) { //WGS84 coords need to be converted to NEE var pointToConvert = new XYZ(arg.Point.X, arg.Point.Y, 0); arg.Point = DIContext.Obtain <ICoreXWrapper>().LLHToNEE(siteModel.CSIB(), pointToConvert.ToCoreX_XYZ(), CoreX.Types.InputAs.Radians).ToTRex_XYZ(); result.Northing = arg.Point.Y; result.Easting = arg.Point.X; } var existenceMap = siteModel.ExistenceMap; // Determine the on-the-ground cell siteModel.Grid.CalculateIndexOfCellContainingPosition(arg.Point.X, arg.Point.Y, out var otgCellX, out var otgCellY); if (!existenceMap[otgCellX >> SubGridTreeConsts.SubGridIndexBitsPerLevel, otgCellY >> SubGridTreeConsts.SubGridIndexBitsPerLevel]) { result.ReturnCode = CellPassesReturnCode.NoDataFound; return(result); } var computeArg = new CellPassesRequestArgument_ClusterCompute(arg.ProjectID, arg.Point, otgCellX, otgCellY, arg.Filters); var requestCompute = new CellPassesRequest_ClusterCompute(); var affinityKey = new SubGridSpatialAffinityKey(SubGridSpatialAffinityKey.DEFAULT_SPATIAL_AFFINITY_VERSION_NUMBER_TICKS, arg.ProjectID, otgCellX, otgCellY); var responseCompute = await requestCompute.ExecuteAsync(computeArg, affinityKey); result.ReturnCode = responseCompute.ReturnCode; result.CellPasses = responseCompute.CellPasses; return(result); }
public async Task Test_CellPassesRequest_ClusterCompute_Execute_EmptySiteModel() { AddApplicationGridRouting(); AddClusterComputeGridRouting(); var siteModel = DITAGFileAndSubGridRequestsWithIgniteFixture.NewEmptyModel(); var request = new CellPassesRequest_ClusterCompute(); var arg = CreateRequestArgument(siteModel); var response = await request.ExecuteAsync(arg, new SubGridSpatialAffinityKey()); response.Should().NotBeNull(); response.ReturnCode.Should().Be(CellPassesReturnCode.NoDataFound); }
public async Task Test_CellPassesRequest_WithLiftFilter(int layerId) { AddApplicationGridRouting(); AddClusterComputeGridRouting(); var baseTime = DateTime.UtcNow; var siteModel = BuildModelForSingleCellLiftAnalysis(baseTime); var request = new CellPassesRequest_ClusterCompute(); var arg = CreateRequestArgument(siteModel); var attributeFilter = new CellPassAttributeFilter { HasLayerStateFilter = true, LayerState = LayerState.On, HasLayerIDFilter = true, LayerID = layerId }; arg.Filters = new FilterSet(new CombinedFilter { AttributeFilter = attributeFilter, SpatialFilter = new CellSpatialFilter() }); var response = await request.ExecuteAsync(arg, new SubGridSpatialAffinityKey(SubGridSpatialAffinityKey.DEFAULT_SPATIAL_AFFINITY_VERSION_NUMBER_TICKS, arg.ProjectID, arg.OTGCellX, arg.OTGCellY)); //There should be one layer with 5 cell passes. The other layer and its cell passes should be excluded. response.Should().NotBeNull(); response.ReturnCode.Should().Be(CellPassesReturnCode.DataFound); response.CellPasses.Count.Should().Be(5); for (var idx = 0; idx < 5; idx++) { var mockModifier = idx + (layerId == LAYER_ID1 ? 1 : 6); var expectedTime = baseTime.AddMinutes(mockModifier); var expectedHeight = 1.0f + mockModifier * 0.5f; var expectedCcv = (short)(10 + 10 * mockModifier); var cellPass = response.CellPasses[idx]; cellPass.LastPassValidCCV.Should().Be(expectedCcv); cellPass.LastPassTime.Should().Be(expectedTime); cellPass.Height.Should().Be(expectedHeight); cellPass.LayersCount.Should().Be(1); } }
public async Task Test_CellPassesRequest_ClusterCompute_ExecuteData() { AddApplicationGridRouting(); AddClusterComputeGridRouting(); var baseTime = DateTime.UtcNow; var siteModel = BuildTestSiteModel(baseTime, count: expectedCount); var request = new CellPassesRequest_ClusterCompute(); var arg = CreateRequestArgument(siteModel); var response = await request.ExecuteAsync(arg, new SubGridSpatialAffinityKey(SubGridSpatialAffinityKey.DEFAULT_SPATIAL_AFFINITY_VERSION_NUMBER_TICKS, arg.ProjectID, arg.OTGCellX, arg.OTGCellY)); response.Should().NotBeNull(); response.ReturnCode.Should().Be(CellPassesReturnCode.DataFound); response.CellPasses.Count.Should().Be(expectedCount); for (var idx = 0; idx < expectedCount; idx++) { var mockModifier = idx + 1; var expectedTime = baseTime.AddMinutes(mockModifier); var expectedHeight = 1.0f + mockModifier * 0.5f; var expectedCcv = (short)(10 + 10 * mockModifier); var expectedMachineSpeed = (ushort)(650 + mockModifier); var expectedMdp = (short)(20 + 20 * mockModifier); var expectedLayerID = (ushort)(idx % 5); var cellPass = response.CellPasses[idx]; cellPass.LastPassValidCCV.Should().Be(expectedCcv); cellPass.LastPassTime.Should().Be(expectedTime); cellPass.Height.Should().Be(expectedHeight); cellPass.MachineSpeed.Should().Be(expectedMachineSpeed); cellPass.LastPassValidMDP.Should().Be(expectedMdp); cellPass.LayerID.Should().Be(expectedLayerID); cellPass.GPSAccuracy.Should().Be(GPSAccuracy.Fine); cellPass.GPSTolerance.Should().Be(20); } }
public void Test_CellPassesRequest_ClusterCompute_Creation() { var request = new CellPassesRequest_ClusterCompute(); request.Should().NotBeNull(); }