public void GetProbabilityValuesForHistogramTest()
        {
            // We will pass in a sorted sequence of 10 pairs of values, each pair has an iterator
            // numbered 0-9, and a corresponding value between 0-4, which repeats after each increment
            // of five by the iterator, so each pair has one duplicate value in the sequence
            // (e.g., (0,0),(1,1),(2,2),...(5,0),(6,1),(7,2),...(9,4) ).
            // The GetProbabilityValues method calculates the number of packet counts (the pair values),
            // then calculates the probability for each pair value, and returns a sorted sequence of
            // pairs with the probability for each pair value.
            // So we should get back a sequence of five pairs with the probabilities for the original
            // pair values.  For example, since the pair values total 20, the probability for a value
            // of 2 is 2/20 = 0.1.  So the returned sequence should be (0,0),(1,0.1),(2,0.2),(3,0.3),(4,0.4).

            // Arrange
            Dictionary<int, int> histogram = new Dictionary<int, int>();
            for (int i = 0; i < 10; i++)
            {
                histogram.Add(i,i % 5);
            }

            CalculateProbability cp = new CalculateProbability(histogram);

            // Act
            Dictionary<int, decimal> sortedProbabilities = new Dictionary<int, decimal>();
            sortedProbabilities = cp.GetProbabilityValues();

            bool results = true;
            if(sortedProbabilities.Count != 5)
            {
                results = false;
            }

            decimal expectedProbability = 0M;

            foreach (var pair in sortedProbabilities)
            {
                if(pair.Value != expectedProbability)
                {
                    results = false;
                }
                expectedProbability = expectedProbability + 0.1M;
            }

            // Assert
            Assert.IsTrue(results);
        }
Example #2
0
        private void CalculateSingleHistogramProbability(BindingList<BatchIntervalMarked> batchIntervalsCollection, BatchType batchType, CurrentCaptureFile captureFile)
        {
            BindingList<BatchIntervalMarked> batchIntervals = new BindingList<BatchIntervalMarked>();
            batchIntervals = batchIntervalsCollection;

            SortedDictionary<int, decimal> histogramProbabilities = new SortedDictionary<int, decimal>();

            int histogramBinSize = AnalysisConfiguration.HistogramBinSize;
            histogramProbabilities = new CalculateProbability(batchIntervals).GetProbabilityByPacketRange(_TrimZeroPacketIntervals, histogramBinSize);

            // Convert histogram probabilities to Histogram type collection
            BindingList<SingleHistogram> singleHistogramProbabilityData = new BindingList<SingleHistogram>();
            foreach (KeyValuePair<int, decimal> data in histogramProbabilities)
            {
                SingleHistogram h = new SingleHistogram();
                h.CaptureBatchId = captureFile.CaptureBatchId;
                h.Interval = data.Key;
                h.Probability = data.Value;
                h.BatchType = Convert.ToInt32(batchType);
                h.CaptureState = Convert.ToInt32(captureFile.CaptureState);
                singleHistogramProbabilityData.Add(h);
            }

            // Save histogram data
            SingleHistogramData shd = new SingleHistogramData(singleHistogramProbabilityData);
            shd.InsertSingleHistogramData();
        }
Example #3
0
        private void CalculateCumulativeHistogramProbability(BindingList<BatchIntervalMarked> batchIntervalsCollection, BatchType batchType, CaptureState captureState)
        {
            BindingList<BatchIntervalMarked> batchIntervals = new BindingList<BatchIntervalMarked>();
            batchIntervals = batchIntervalsCollection;

            SortedDictionary<int, decimal> histogramProbabilities = new SortedDictionary<int, decimal>();

            int histogramBinSize = AnalysisConfiguration.HistogramBinSize;
            histogramProbabilities = new CalculateProbability(batchIntervals).GetProbabilityByPacketRange(_TrimZeroPacketIntervals, histogramBinSize);

            // Update the cumulative intervals for calculating cumulative probability distributions
            switch(captureState)
            {
                case CaptureState.Marked:
                    _CumulativeMarkedProbabilities = histogramProbabilities;
                    break;

                case CaptureState.Unmarked:
                    _CumulativeUnmarkedProbabilities = histogramProbabilities;
                    break;
            }

            // Convert histogram probabilities to Histogram type collection
            BindingList<CumulativeHistogram> cumulativeHistogramProbabilityData = new BindingList<CumulativeHistogram>();
            foreach (KeyValuePair<int, decimal> data in histogramProbabilities)
            {
                CumulativeHistogram h = new CumulativeHistogram();
                h.Interval = data.Key;
                h.Probability = data.Value;
                h.BatchType = Convert.ToInt32(batchType);
                h.CaptureState = Convert.ToInt32(captureState);
                cumulativeHistogramProbabilityData.Add(h);
            }

            // Save histogram data
            CumulativeHistogramData chd = new CumulativeHistogramData(cumulativeHistogramProbabilityData);
            chd.InsertCumulativeHistogramData();
        }
Example #4
0
        public bool CalculateSingleBatchStatisticsForLastTwoBatches()
        {
            bool result = false;

            // Calculate single batch statistics
            // Get the last marked and unmarked batches and add them to the graph
            BindingList<CurrentCaptureFile> lastBatchIds = new BindingList<CurrentCaptureFile>();
            ProcessCapturePackets pcp = new ProcessCapturePackets();
            lastBatchIds = pcp.GetLastCaptureBatchIds();

            foreach (CurrentCaptureFile file in lastBatchIds)
            {
                BindingList<BatchIntervalMarked> batchIntervals = new BindingList<BatchIntervalMarked>();

                // Calculate probabilities
                batchIntervals = pcp.GetMarkedBatchIntervals(file.CaptureBatchId);
                int histogramBinSize = Convert.ToInt32(_HistogramBinSize);
                SortedDictionary<int, decimal> probabilities = new CalculateProbability(batchIntervals).GetProbabilityByPacketRange(_TrimZeroPacketIntervals, histogramBinSize);
            }

            return result;
        }
Example #5
0
        public bool CalculateSingleBatchStatistics()
        {
            bool result = false;

            // Calculate single batch statistics
            //// Get the last marked and unmarked batches and add them to the graph
            //int lastBatchId = 0;
            ProcessCapturePackets pcp = new ProcessCapturePackets();
            //lastBatchId = pcp.GetLastCaptureBatchId();
            CurrentCaptureFile captureFile = new CurrentCaptureFile();
            CaptureFileData cfd = new CaptureFileData();
            //captureFile = cfd.GetLastCaptureBatchRecord();
            captureFile = cfd.GetCurrentCaptureFile(_CaptureFileName);

            // Set the global variable
            _CaptureState = captureFile.CaptureState;

            BindingList<BatchIntervalMarked> batchIntervals = new BindingList<BatchIntervalMarked>();

            // Calculate probabilities
            batchIntervals = pcp.GetMarkedBatchIntervals(captureFile.CaptureBatchId);
            int histogramBinSize = Convert.ToInt32(_HistogramBinSize);
            SortedDictionary<int, decimal> probabilities = new CalculateProbability(batchIntervals).GetProbabilityByPacketRange(_TrimZeroPacketIntervals, histogramBinSize);

            BatchStatistics markedSingleStats = new BatchStatistics();
            BatchStatistics unmarkedSingleStats = new BatchStatistics();

            // Add the results to the DisplayStatistics table
            DisplayStatisticsData dsd = new DisplayStatisticsData();
            if(captureFile.CaptureState == CaptureState.Marked)
            {
                markedSingleStats = CalculateBatchStatistics(batchIntervals, CaptureState.Marked, BatchType.Single);
            }
            else
            {
                unmarkedSingleStats = CalculateBatchStatistics(batchIntervals, CaptureState.Unmarked, BatchType.Single);
            }
            return result;
        }
Example #6
0
        public void CalculateCumulativeProbabilityDistribution(CaptureState captureState)
        {
            // Note: cumulative histogram intervals must have previously been calculated in order to calculate cumulative probabilities

            //SortedDictionary<int, decimal> _CumulativeMarkedProbabilities = new SortedDictionary<int, decimal>();
            //SortedDictionary<int, decimal> _CumulativeUnmarkedProbabilities = new SortedDictionary<int, decimal>();

            //_CumulativeMarkedProbabilities = new CalculateProbability(batchIntervals).GetProbabilityByPacketRange(_TrimZeroPacketIntervals, histogramBinSize);

            // Get the batch intervals
            BindingList<BatchIntervalMarked> unmarkedBatchIntervals = new BindingList<BatchIntervalMarked>();
            BindingList<BatchIntervalMarked> markedBatchIntervals = new BindingList<BatchIntervalMarked>();
            BindingList<CumulativeProbabilityDistribution> distribution = new BindingList<CumulativeProbabilityDistribution>();
            //CumulativeProbabilityDistributionData cumProbDistData = new CumulativeProbabilityDistributionData();

            using (var uow = new UnitOfWorkCumulativeProbability())
            {
                //using (var cpdRepository = new CumulativeProbabilityDistributionRepository(new UnitOfWorkCumulativeProbability()))
                using (var cpdRepository = new CumulativeProbabilityDistributionRepository(uow))
                {
                    //// Delete any existing cumulative probability distribution data for the captureState
                    //cumProbDistData.DeleteCumulativeProbabilityDistribution(captureState);

                    cpdRepository.DeleteBatch(captureState);

                    // Add the newly calculated cumulative probability distribution
                    switch (captureState)
                    {
                        case CaptureState.Marked:
                            if (_CumulativeMarkedProbabilities != null)
                            {
                                SortedDictionary<int, decimal> markedProbabilities = new CalculateProbability(markedBatchIntervals).GetCumulativeProbabilityDistribution(_CumulativeMarkedProbabilities);

                                // Convert to CumulativeProbabilityDistribution type
                                foreach (KeyValuePair<int, decimal> item in markedProbabilities)
                                {
                                    CumulativeProbabilityDistribution cpd = new CumulativeProbabilityDistribution();
                                    cpd.CaptureState = (int)CaptureState.Marked;
                                    cpd.Interval = item.Key;
                                    cpd.Probability = Math.Round(item.Value, 10);
                                    //distribution.Add(cpd);
                                    cpdRepository.InsertOrUpdate(cpd);
                                    uow.Save();
                                }
                            }
                            //// Save to database
                            //cumProbDistData.InsertCumulativeProbabilityDistribution(distribution);
                            break;

                        case CaptureState.Unmarked:
                            if (_CumulativeUnmarkedProbabilities != null)
                            {
                                SortedDictionary<int, decimal> unmarkedProbabilities = new CalculateProbability(unmarkedBatchIntervals).GetCumulativeProbabilityDistribution(_CumulativeUnmarkedProbabilities);

                                // Convert to CumulativeProbabilityDistribution type
                                foreach (KeyValuePair<int, decimal> item in unmarkedProbabilities)
                                {
                                    CumulativeProbabilityDistribution cpd = new CumulativeProbabilityDistribution();
                                    cpd.CaptureState = (int)CaptureState.Unmarked;
                                    cpd.Interval = item.Key;
                                    //cpd.Probability = Convert.ToDecimal(String.Format("{0,10}", item.Value.ToString("D")));
                                    cpd.Probability = Math.Round(item.Value, 10);
                                    //distribution.Add(cpd);
                                    cpdRepository.InsertOrUpdate(cpd);
                                    uow.Save();
                                }

                            }
                            //// Save to database
                            //cumProbDistData.InsertCumulativeProbabilityDistribution(distribution);
                            break;
                    }
                }
            }
        }