예제 #1
0
        public void MaxVelocityInput()
        {
            PredictionModel      model = new PredictionModel();
            PredictionModelInput input = new PredictionModelInput();

            input.CWPBB_LagLength  = 1.0;
            input.BeamAngle        = 20.0;
            input.SystemFrequency  = 288000.0;
            input.SpeedOfSound     = 1490.0;
            input.CyclesPerElement = 12;

            double std           = model.GetMaxVelocity(input);
            double correctAnswer = 2.669;

            Assert.AreEqual(correctAnswer, std, 0.001);
        }
예제 #2
0
        public void MaxVelocity()
        {
            PredictionModel model = new PredictionModel();

            Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType type = Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType.NARROWBAND;
            double _CWPBB_LagLength_  = 1.0;
            double _BeamAngle_        = 20.0;
            double _SystemFrequency_  = 1152000.0;
            double _SpeedOfSound_     = 1490.0;
            double _CyclesPerElement_ = 12.0;
            double _CWPBS_            = 0.6;

            double vel           = model.GetMaxVelocity(type, _CWPBB_LagLength_, _CWPBS_, _BeamAngle_, _SystemFrequency_, _SpeedOfSound_, _CyclesPerElement_);
            double correctAnswer = 1.867;

            Assert.AreEqual(correctAnswer, vel, 0.001);
        }
예제 #3
0
        public void MaxVelocityInputNb()
        {
            PredictionModel      model = new PredictionModel();
            PredictionModelInput input = new PredictionModelInput();

            input.CWPBB_LagLength         = 1.0;
            input.BeamAngle               = 20.0;
            input.SystemFrequency         = 1152000.0;
            input.SpeedOfSound            = 1467;
            input.CyclesPerElement        = 12;
            input.CWPBB_TransmitPulseType = Commands.AdcpSubsystemCommands.eCWPBB_TransmitPulseType.NARROWBAND;
            input.CWPBS = 0.6f;

            double std           = model.GetMaxVelocity(input);
            double correctAnswer = 1.867;

            Assert.AreEqual(correctAnswer, std, 0.001);
        }
        /// <summary>
        /// Setup the predictor.
        /// </summary>
        public void CalcPrediction()
        {
            if (_pm.SelectedProject.Configuration.SubsystemConfigDict.ContainsKey(ConfigKey))
            {
                PredictionModelInput predInput = new PredictionModelInput(_pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].SubsystemConfig.SubSystem);

                if (_pm.SelectedProject.Configuration.DeploymentOptions.Duration <= 0)
                {
                    predInput.DeploymentDuration = 1;
                }
                else
                {
                    predInput.DeploymentDuration = _pm.SelectedProject.Configuration.DeploymentOptions.Duration;
                }

                // Absorption
                predInput.Temperature = _pm.SelectedProject.Configuration.Commands.CWT;
                predInput.Salinity    = _pm.SelectedProject.Configuration.Commands.CWS;
                predInput.XdcrDepth   = _pm.SelectedProject.Configuration.Commands.CTD;

                predInput.CEI = _pm.SelectedProject.Configuration.Commands.CEI.ToSecondsD();

                predInput.CWPON = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPON;
                predInput.CBTON = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBTON;

                predInput.CBTTBP = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBTTBP;
                predInput.CBTBB_TransmitPulseType = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBTBB_Mode;
                //predInput.CBTBB_TransmitPulseType = Commands.AdcpSubsystemCommands.eCBTBB_Mode.NARROWBAND_LONG_RANGE;   // DEFAULT to narrowband because it autoswitches now

                predInput.CWPTBP = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPTBP;
                predInput.CWPBN  = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBN;
                predInput.CWPBS  = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBS;
                predInput.CWPBL  = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBL;
                predInput.CWPBB_TransmitPulseType = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBB_TransmitPulseType;
                predInput.CWPBB_LagLength         = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPBB_LagLength;
                predInput.CWPP = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CWPP;

                predInput.BatteryType = _pm.SelectedProject.Configuration.DeploymentOptions.BatteryType;

                predInput.CBI_BurstInterval   = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBI_BurstInterval.ToSecondsD();
                predInput.CBI_SamplesPerBurst = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBI_NumEnsembles;
                predInput.CBI_IsInterleaved   = _pm.SelectedProject.Configuration.SubsystemConfigDict[ConfigKey].Commands.CBI_BurstPairFlag;

                // Create Prediction model
                PredictionModel Predictor = new PredictionModel();

                // Set the prediction values
                PredictionModel.PredictedRanges ranges = Predictor.GetPredictedRange(predInput);
                PredictedBottomRange    = ranges.BottomTrack;
                PredictedProfileRange   = ranges.WaterProfile;
                ProfileFirstBinPosition = ranges.FirstBinPosition.ToString("0.0000");

                double maxVel = Predictor.GetMaxVelocity(predInput);
                MaximumVelocity = maxVel.ToString("0.0000");

                double std = Predictor.GetStandardDeviation(predInput);
                StandardDeviation = std.ToString("0.0000");

                double numBatts = Predictor.BatteryUsage(predInput);
                NumberBatteryPacks = numBatts;

                if (CBI_NumEnsembles > 0)
                {
                    NumberBytes = Predictor.GetDataStorageBurst(predInput);
                }
                else
                {
                    NumberBytes = Predictor.GetDataStorage(predInput);
                }

                if (RangeVM != null)
                {
                    // Update all the properites
                    RangeVM.WaterProfileRange = ranges.WaterProfile;
                    RangeVM.BottomTrackRange  = ranges.BottomTrack;
                    RangeVM.WpBlank           = predInput.CWPBL;
                    RangeVM.WpFirstBinRange   = ranges.FirstBinPosition;
                    if (_pm.IsProjectSelected && _pm.SelectedProject.Configuration != null)
                    {
                        RangeVM.DepthToBottom = predInput.XdcrDepth;
                    }
                }

                //this.NotifyOfPropertyChange(() => this.CWPP);
                //this.NotifyOfPropertyChange(() => this.CWPTBP);
                //this.NotifyOfPropertyChange(() => this.CWPBS);
                //this.NotifyOfPropertyChange(() => this.CWPBN);
                //this.NotifyOfPropertyChange(() => this.CWPBL);
                //this.NotifyOfPropertyChange(() => this.CWPBB_TransmitPulseType);
                //this.NotifyOfPropertyChange(() => this.CWPBB_LagLength);
                //this.NotifyOfPropertyChange(() => this.CBTON);
                //this.NotifyOfPropertyChange(() => this.CBI_BurstInterval);

                //this.NotifyOfPropertyChange(() => this.DataSize);
                //this.NotifyOfPropertyChange(() => this.NumberBatteryPackStr);
                //this.NotifyOfPropertyChange(() => this.PredictedBottomRangeStr);
                //this.NotifyOfPropertyChange(() => this.PredictedProfileRangeStr);
                //this.NotifyOfPropertyChange(() => this.ProfileFirstBinPosition);
                //this.NotifyOfPropertyChange(() => this.MaximumVelocity);
                //this.NotifyOfPropertyChange(() => this.StandardDeviation);
            }
        }