private async Task <IActionResult> OriginalComparison(LogComparisonModel model)
        {
            var dives = await _apiHelper.CompareDives(model.Depth, model.Time, model.DiveType);

            if (!ModelState.IsValid)
            {
                return(View(new ErrorViewModel {
                    RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
                }));
            }

            var resultsModel = new LogComparisonResultsModel();

            foreach (var dive in dives)
            {
                var diveProfile = new DiveProfile();
                foreach (var dp in dive.DataPoints.OrderBy(x => x.Time))
                {
                    var datapoint = new DataPoint(dp.Time, Convert.ToDouble(dp.Depth));
                    diveProfile.Datapoints.Add(datapoint);
                }

                resultsModel.DiveProfiles.Add(diveProfile);
            }

            return(View(resultsModel));
        }
        private async Task <IActionResult> EndLoadedComparison(LogComparisonModel model)
        {
            var dives = await _apiHelper.CompareDives(model.Depth, model.Time, model.DiveType);

            if (!ModelState.IsValid)
            {
                return(View(new ErrorViewModel {
                    RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
                }));
            }

            var resultsModel = new LogComparisonResultsModel();

            if (dives.Any())
            {
                var longestDive = dives.OrderByDescending(x => x.DiveLength).First();
                foreach (var dive in dives)
                {
                    var diveProfile       = new DiveProfile();
                    var diveOffset        = longestDive.DiveLength.Subtract(dive.DiveLength);
                    var orderedDatapoints = dive.DataPoints.OrderBy(x => x.Time).ToList();
                    var logInterval       = orderedDatapoints[1].Time - orderedDatapoints[0].Time;

                    var blankValuesCount = diveOffset.TotalSeconds / logInterval;
                    var count            = 0;
                    while (blankValuesCount > 0)
                    {
                        diveProfile.Datapoints.Add(new DataPoint(count * logInterval, 0));
                        count++;
                        blankValuesCount--;
                    }

                    foreach (var dp in orderedDatapoints)
                    {
                        var datapoint = new DataPoint(dp.Time + diveOffset.TotalSeconds, Convert.ToDouble(dp.Depth));
                        diveProfile.Datapoints.Add(datapoint);
                    }

                    resultsModel.DiveProfiles.Add(diveProfile);
                }
            }

            return(View(resultsModel));
        }
        public void RunToleratedAmbientPressureStage(double[] mockTissuePressuresTotal, double[] mockAValues,
                                                     double[] mockBValues, double[] toleratedAmbientPressuresResult)
        {
            _diveProfile = DiveProfileHelper.InitaliseDiveProfile();

            _diveProfile.TissuePressuresTotal = new List <double>(mockTissuePressuresTotal);
            _diveProfile.AValues = new List <double>(mockAValues);
            _diveProfile.BValues = new List <double>(mockBValues);

            var diveStage = new DiveStageToleratedAmbientPressure(_diveModel.CompartmentCount, _diveProfile);

            //Act
            for (int i = 0; i < _diveModel.CompartmentCount; i++)
            {
                diveStage.RunStage();

                //Assert
                Assert.Equal(toleratedAmbientPressuresResult[i], _diveProfile.ToleratedAmbientPressures[i], 4);
            }
        }
예제 #4
0
        public void RunCompartmentLoadStage(double[] mockTissuePressuresTotal, double[] mockMaxSurfacePressure,
                                            double[] compartmentLoadResult)
        {
            //Arrange
            _diveProfile = DiveProfileHelper.InitaliseDiveProfile();

            _diveProfile.TissuePressuresTotal = new List <double>(mockTissuePressuresTotal);
            _diveProfile.MaxSurfacePressures  = new List <double>(mockMaxSurfacePressure);

            var diveStage = new DiveStageCompartmentLoad(_diveModel, _diveProfile);

            //Act
            for (int i = 0; i < _diveModel.CompartmentCount; i++)
            {
                diveStage.RunStage();

                //Assert
                Assert.Equal(compartmentLoadResult[i], _diveProfile.CompartmentLoad[i], 4);
            }
        }
예제 #5
0
        public void RunMaximumSurfacePressureStage(double[] mockAValues, double[] mockBValues,
                                                   double[] maxSurfacePressureResult)
        {
            //Arrange
            _diveProfile = DiveProfileHelper.InitaliseDiveProfile();

            _diveProfile.AValues = new List <double>(mockAValues);
            _diveProfile.BValues = new List <double>(mockBValues);

            var diveStage = new DiveStageMaximumSurfacePressure(_diveModel.CompartmentCount, _diveProfile);

            //Act
            for (int i = 0; i < _diveModel.CompartmentCount; i++)
            {
                diveStage.RunStage();

                //Assert
                Assert.Equal(maxSurfacePressureResult[i], _diveProfile.MaxSurfacePressures[i], 4);
            }
        }
예제 #6
0
        public static DiveProfile InitaliseDiveProfile()
        {
            var diveModel   = new Zhl16Buhlmann();
            var diveProfile = new DiveProfile();

            for (int i = 0; i < diveModel.CompartmentCount; i++)
            {
                diveProfile.MaxSurfacePressures.Add(0.0);
                diveProfile.ToleratedAmbientPressures.Add(0.0);
                diveProfile.CompartmentLoad.Add(0.0);

                diveProfile.TissuePressuresNitrogen.Add(0.79);
                diveProfile.TissuePressuresHelium.Add(0.0);
                diveProfile.TissuePressuresTotal.Add(0.0);

                diveProfile.AValues.Add(0.0);
                diveProfile.BValues.Add(0.0);
            }

            return(diveProfile);
        }
예제 #7
0
        public void RunAbValuesStage(double[] mockTissuePressureNitrogen, double[] mockTissuePressureHelium,
                                     double[] mockTissuePressureTotal, double[] aValueResult, double[] bValueResult)
        {
            //Arrange
            _diveProfile = DiveProfileHelper.InitaliseDiveProfile();

            _diveProfile.TissuePressuresNitrogen = new List <double>(mockTissuePressureNitrogen);
            _diveProfile.TissuePressuresHelium   = new List <double>(mockTissuePressureHelium);
            _diveProfile.TissuePressuresTotal    = new List <double>(mockTissuePressureTotal);

            var diveStage = new DiveStageAbValues(_diveModel, _diveProfile);

            //Act
            for (int i = 0; i < _diveModel.CompartmentCount; i++)
            {
                diveStage.RunStage();

                //Assert
                Assert.Equal(aValueResult[i], _diveProfile.AValues[i], 4);
                Assert.Equal(bValueResult[i], _diveProfile.BValues[i], 4);
            }
        }
예제 #8
0
        public async Task <IActionResult> LogSearcherResults(LogSearcherModel model)
        {
            var dives = await _apiHelper.SearchDives(
                model.DiveType,
                model.TargetDepth,
                model.TargetDepthRange,
                model.TargetDiveTime,
                model.TargetDiveTimeRange);

            if (!ModelState.IsValid)
            {
                return(View(new ErrorViewModel {
                    RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier
                }));
            }

            var resultsModel = new LogSearcherResultsModel();

            foreach (var dive in dives)
            {
                var diveProfile = new DiveProfile();
                diveProfile.Index    = dives.FindIndex(d => d.Equals(dive));
                diveProfile.DiveDate = dive.DiveDate;

                // Change this to sample data points for mini graphs
                foreach (var dp in dive.DataPoints)
                {
                    var datapoint = new DataPoint(dp.Time, Convert.ToDouble(dp.Depth), cns: dp.CNS, averagePPO2: Convert.ToDouble(dp.AveragePPO2));
                    diveProfile.Datapoints.Add(datapoint);
                }

                resultsModel.DiveProfiles.Add(diveProfile);
            }

            return(View(resultsModel));
        }