}//End of ClassifyPre

        public ActionResult ClassifyPost(string className, int classID)
        {
            var classModel = new ClassificationChoicePost {
                choiceName = className, choiceID = classID
            };

            return(View(classModel));
        }//End of ClassifyPost
        public ActionResult ResultsPost(ClassificationChoicePost model)
        {
            ML_DBEntities dbML = new ML_DBEntities();


            //Normalize Necessary Values
            model.radius    = (model.radius - 6.981) / (28.11 - 6.981);
            model.texture   = (model.texture - 9.71) / (39.28 - 9.71);
            model.perimeter = (model.perimeter - 43.79) / (188.5 - 43.79);
            model.area      = (model.area - 143.5) / (2501 - 143.5);

            //Calculate Prior Probabilities
            var priorProbabilityM = Convert.ToDouble(
                (from c in dbML.post96
                 where c.Metric == "Percent Malignant"
                 select new { c.Value }).Single().Value);

            var priorProbabilityB = Convert.ToDouble(
                (from c in dbML.post96
                 where c.Metric == "Percent Benign"
                 select new { c.Value }).Single().Value);

            // Pull Benign Values From the Database
            string[,] allkeys = new string[, ] {
                { "Avg Radius", "stdev Radius" },
                { "Avg Texture", "stdev Texture" },
                { "Avg Perimeter", "stdev Perimeter" },
                { "Avg Area", "stdev Area" },
                { "Avg Smoothness", "stdev Smoothness" },
                { "Avg Compactness", "stdev Compactness" },
                { "Avg Concavity", "stdev Concavity" },
                { "Avg Concave Points", "stdev Concave Points" },
                { "Avg Symmetry", "stdev Symmetry" },
                { "Avg Fractal Dimension", "Avg Fractal Dimension" }
            };

            double[][] numbers = new double[allkeys.Length][];

            for (int i = 0; i < 10; i++)
            {
                double[] statsValues = new double[2];


                string key1 = allkeys[i, 0].ToString();
                string key2 = allkeys[i, 1].ToString();

                statsValues[0] = Convert.ToDouble(
                    (from c in dbML.post96
                     where c.Metric == key1
                     select new { c.Value }).Single().Value);

                statsValues[1] = Convert.ToDouble(
                    (from c in dbML.post96
                     where c.Metric == key2
                     select new { c.Value }).Single().Value);

                numbers[i] = statsValues;
            }

            // Pull Malignant Values From the Database
            string[,] allkeysM = new string[, ] {
                { "Avg Radius M", "stdev Radius M" },
                { "Avg Texture M", "stdev Texture M" },
                { "Avg Perimeter M", "stdev Perimeter M" },
                { "Avg Area M", "stdev Area M" },
                { "Avg Smoothness M", "stdev Smoothness M" },
                { "Avg Compactness M", "stdev Compactness M" },
                { "Avg Concavity M", "stdev Concavity M" },
                { "Avg Concave Points M", "stdev Concave Points M" },
                { "Avg Symmetry M", "stdev Symmetry M" },
                { "Avg Fractal Dimension M", "Avg Fractal Dimension M" }
            };

            double[][] numbersM = new double[allkeysM.Length][];
            for (int i = 0; i < 10; i++)
            {
                double[] statsValues = new double[2];

                string key1 = allkeysM[i, 0].ToString();
                string key2 = allkeysM[i, 1].ToString();

                statsValues[0] = Convert.ToDouble(
                    (from c in dbML.post96
                     where c.Metric == key1
                     select new { c.Value }).Single().Value);

                statsValues[1] = Convert.ToDouble(
                    (from c in dbML.post96
                     where c.Metric == key2
                     select new { c.Value }).Single().Value);

                numbersM[i] = statsValues;
            }


            //Calculate Likelihoods
            var postdiagnosisLikelihoodB =
                calculateProbability(model.radius, numbers[0]) *
                calculateProbability(model.texture, numbers[1]) *
                calculateProbability(model.perimeter, numbers[2]) *
                calculateProbability(model.area, numbers[3]) *
                calculateProbability(model.smoothness, numbers[4]) *
                calculateProbability(model.compactness, numbers[5]) *
                calculateProbability(model.concavity, numbers[6]) *
                calculateProbability(model.concavePts, numbers[7]) *
                calculateProbability(model.symmetry, numbers[8]) *
                calculateProbability(model.fractalDimension, numbers[9]);



            var postdiagnosisLikelihoodM =
                calculateProbability(model.radius, numbersM[0]) *
                calculateProbability(model.texture, numbersM[1]) *
                calculateProbability(model.perimeter, numbersM[2]) *
                calculateProbability(model.area, numbersM[3]) *
                calculateProbability(model.smoothness, numbersM[4]) *
                calculateProbability(model.compactness, numbersM[5]) *
                calculateProbability(model.concavity, numbersM[6]) *
                calculateProbability(model.concavePts, numbersM[7]) *
                calculateProbability(model.symmetry, numbersM[8]) *
                calculateProbability(model.fractalDimension, numbersM[9]);


            if ((postdiagnosisLikelihoodB * priorProbabilityB) >= (postdiagnosisLikelihoodM * priorProbabilityM))
            {
                ViewBag.diagnosis    = "Diagnosis: Benign";
                ViewBag.probabilityB = "The Likelihood Maximum of a Benign Tumor: " + (postdiagnosisLikelihoodB * priorProbabilityB).ToString();
                ViewBag.probabilityM = "The Likelihood Maximun of a Malignant Tumor: " + (postdiagnosisLikelihoodM * priorProbabilityM).ToString();



                Highcharts chart = new Highcharts("chart")
                                   .InitChart(new Chart {
                    DefaultSeriesType = ChartTypes.Bar
                })
                                   .SetTitle(new Title {
                    Text = "Patient Data Comparison"
                })
                                   .SetSubtitle(new Subtitle {
                    Text = "Data for Patient " + model.patientID
                })
                                   .SetXAxis(new XAxis
                {
                    Categories = new[] { "Radius", "Texture", "Perimeter", "Area", "Smoothness",
                                         "Compactness",
                                         "Concavity",
                                         "Concave Points",
                                         "Symmetry", "Fractal Dimension" },

                    Title = new XAxisTitle {
                        Text = "Cell Attributes"
                    }
                })
                                   .SetYAxis(new YAxis
                {
                    Min   = 0,
                    Title = new YAxisTitle
                    {
                        Text  = "Values",
                        Align = AxisTitleAligns.High
                    }
                })
                                   .SetTooltip(new Tooltip {
                    Formatter = "function() { return ''+ this.series.name +': '+ this.y; }"
                })
                                   .SetPlotOptions(new PlotOptions
                {
                    Bar = new PlotOptionsBar
                    {
                        DataLabels = new PlotOptionsBarDataLabels {
                            Enabled = false
                        }
                    }
                })
                                   .SetCredits(new Credits {
                    Enabled = false
                })
                                   .SetSeries(new[]
                {
                    new Series {
                        Name = "Average Benign Patient", Data = new Data(new object[] { numbers[0][0], numbers[1][0], numbers[2][0], numbers[3][0], numbers[4][0], numbers[5][0],
                                                                                        numbers[6][0], numbers[7][0], numbers[8][0], numbers[9][0] })
                    },
                    new Series {
                        Name = "Average Malignant Patient", Data = new Data(new object[] { numbersM[0][0], numbersM[1][0], numbersM[2][0], numbersM[3][0], numbersM[4][0], numbersM[5][0],
                                                                                           numbersM[6][0], numbersM[7][0], numbersM[8][0], numbersM[9][0] })
                    },
                    new Series {
                        Name = "Patient " + model.patientID.ToString(), Data = new Data(new object[] { model.radius, model.texture, model.perimeter, model.area,
                                                                                                       model.smoothness, model.compactness, model.concavity, model.concavePts, model.symmetry, model.fractalDimension })
                    }
                });

                return(View(chart));
            }

            else
            {
                ViewBag.diagnosis    = "Diagnosis: Malignant";
                ViewBag.probabilityB = "The Likelihood Maximum of a Benign Tumor: " + (postdiagnosisLikelihoodB * priorProbabilityB).ToString();
                ViewBag.probabilityM = "The Likelihood Maximum of a Malignant Tumor: " + (postdiagnosisLikelihoodM * priorProbabilityM).ToString();



                Highcharts chart = new Highcharts("chart")
                                   .InitChart(new Chart {
                    DefaultSeriesType = ChartTypes.Bar
                })
                                   .SetTitle(new Title {
                    Text = "Patient Data Comparison"
                })
                                   .SetSubtitle(new Subtitle {
                    Text = "Data for Patient " + model.patientID
                })
                                   .SetXAxis(new XAxis
                {
                    Categories = new[] { "Radius", "Texture", "Perimeter", "Area", "Smoothness",
                                         "Compactness",
                                         "Concavity",
                                         "Concave Points",
                                         "Symmetry", "Fractal Dimension" },

                    Title = new XAxisTitle {
                        Text = "Cell Attributes"
                    }
                })
                                   .SetYAxis(new YAxis
                {
                    Min   = 0,
                    Title = new YAxisTitle
                    {
                        Text  = "Values",
                        Align = AxisTitleAligns.High
                    }
                })
                                   .SetTooltip(new Tooltip {
                    Formatter = "function() { return ''+ this.series.name +': '+ this.y; }"
                })
                                   .SetPlotOptions(new PlotOptions
                {
                    Bar = new PlotOptionsBar
                    {
                        DataLabels = new PlotOptionsBarDataLabels {
                            Enabled = false
                        }
                    }
                })
                                   .SetCredits(new Credits {
                    Enabled = false
                })
                                   .SetSeries(new[]
                {
                    new Series {
                        Name = "Average Benign Patient", Data = new Data(new object[] { numbers[0][0], numbers[1][0], numbers[2][0], numbers[3][0], numbers[4][0], numbers[5][0],
                                                                                        numbers[6][0], numbers[7][0], numbers[8][0], numbers[9][0] })
                    },
                    new Series {
                        Name = "Average Malignant Patient", Data = new Data(new object[] { numbersM[0][0], numbersM[1][0], numbersM[2][0], numbersM[3][0], numbersM[4][0], numbersM[5][0],
                                                                                           numbersM[6][0], numbersM[7][0], numbersM[8][0], numbersM[9][0] })
                    },
                    new Series {
                        Name = "Patient " + model.patientID.ToString(), Data = new Data(new object[] { model.radius, model.texture, model.perimeter, model.area,
                                                                                                       model.smoothness, model.compactness, model.concavity, model.concavePts, model.symmetry, model.fractalDimension })
                    }
                });

                return(View(chart));
            }
        }