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); }
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(); }
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(); }
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; }
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; }
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; } } } }