private void printChart(InputData[] data, int lambda, string[] dataDescriptions)
        {

            DataTable table;


            this.Text = "Lambda" + lambda + " comparison";
            this.chartLambda.Series.RemoveAt(0);
            for (int i = 0; i < 4; i++)
            {
                if (data.Length >= i + 1)
                {
                    if (data[i] != null)
                    {
                        table = data[i].getLagrangeDatatable();
           
                        this.chartLambda.Series.Add(dataDescriptions[i] + "values").ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.BoxPlot;
                        this.chartLambda.Series[dataDescriptions[i] + "values"].Points.DataBindY((table.Rows[lambda]).ItemArray);

                        this.chartLambda.Series.Add(dataDescriptions[i]).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.BoxPlot;
                        this.chartLambda.Series[dataDescriptions[i]]["BoxPlotSeries"] = dataDescriptions[i] + "values";
                        this.chartLambda.Series[dataDescriptions[i]]["BoxPlotWhiskerPercentile"] = "15";
                        this.chartLambda.Series[dataDescriptions[i]]["BoxPlotShowAverage"] = "true";
                        this.chartLambda.Series[dataDescriptions[i]]["BoxPlotShowMedian"] = "true";
                        this.chartLambda.Series[dataDescriptions[i]]["BoxPlotShowUnusualValues"] = "true";

                        this.chartLambda.Series[dataDescriptions[i] + "values"].Enabled = false;
                        addColorToBoxPlot(i,dataDescriptions[i]);
                    }
                }
            } 
        }
        public Graph(InputData[] data, int lambda, string[] dataDescriptions)
        {
            metaData = new GraphMetaData[dataDescriptions.Length];
            InitializeComponent();
            m_Lambda = lambda;
            m_Data = data;
            m_DataDescriptions = dataDescriptions;
            activeLines = new Boolean[] { false, false, false, false };
            locateButtuns(data.Length, dataDescriptions);
            printChart(data, lambda, dataDescriptions);


        }
 private void cmdBrowse_Click(object sender, EventArgs e)
 {
     if (numOfActiveData == Consts.OPTIONAL_DATA_INSERT)
     {
         MessageBox.Show("No space for more data...");
         return;
     }
     dialog = new OpenFileDialog();
     dialog.Filter = "Text files | *.csv"; // file types, that will be allowed to upload
     dialog.Multiselect = false; // allow/deny user to upload more than one file at a time
     if (dialog.ShowDialog() == DialogResult.OK) // if user clicked OK
     {
         showPath(dialog.FileName);
         txtUploadCSV1.Text = dialog.FileName; // get name of file
         FileStream fs = new FileStream(dialog.FileName, FileMode.OpenOrCreate);
         inputData[numOfActiveData] = new InputData(fs);
         numOfActiveData++;
     }
 }
 public BoxPlot(InputData[] data, int lambda, string[] dataDescriptions)
 {
     InitializeComponent();
     printChart(data, lambda, dataDescriptions);
 }
        private void printChart(InputData[] data, int lambda, string[] dataDescriptions)
        {

            DataTable table1, table2, table3, table4;


            this.Text = "Lambda" + lambda + " comparison";
            if (data.Length >= 1)
            {
                if (data[0] != null && activeLines[0])
                {
                    
                    table1 = data[0].getLagrangeDatatable();
                    double[] array = new double[table1.Rows.Count]; 
                    this.chartLambda.Series.Add(dataDescriptions[0]).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                    this.chartLambda.Series[dataDescriptions[0]].Color = Color.Blue;
                    for (int i = 0; i < table1.Rows.Count; i++)
                    {
                        if (table1.Rows.Count > lambda)
                        {
                            this.chartLambda.Series[dataDescriptions[0]].Points.AddXY(i, table1.Rows[lambda][i]);
                            array[i] = (double)table1.Rows[lambda][i];
                        }
                    }
                    metaData[0] = new GraphMetaData 
                    {
                        Average = array.Average(),
                        StandardDeviation = getStandardDeviation(array.ToList<double>())
                    };
                }
                
            }
            if (data.Length >= 2)
            {
                if (data[1] != null && activeLines[1])
                {
                    
                    table2 = data[1].getLagrangeDatatable();
                    double[] array = new double[table2.Rows.Count]; 
                    this.chartLambda.Series.Add(dataDescriptions[1]).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                    this.chartLambda.Series[dataDescriptions[1]].Color = Color.Red;
                    for (int i = 0; i < table2.Rows.Count; i++)
                    {
                        if (table2.Rows.Count > lambda)
                        {
                            this.chartLambda.Series[dataDescriptions[1]].Points.AddXY(i, table2.Rows[lambda][i]);
                            array[i] = (double)table2.Rows[lambda][i];
                        }
                    }
                    metaData[1] = new GraphMetaData 
                    {
                        Average = array.Average(),
                        StandardDeviation = getStandardDeviation(array.ToList<double>())
                    };
                }
            }
            if (data.Length >= 3)
            {
                if (data[2] != null && activeLines[2])
                {
                     
                    table3 = data[2].getLagrangeDatatable();
                    double[] array = new double[table3.Rows.Count];
                    this.chartLambda.Series.Add(dataDescriptions[2]).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                    this.chartLambda.Series[dataDescriptions[2]].Color = Color.Green;
                    for (int i = 0; i < table3.Rows.Count; i++)
                    {
                        if (table3.Rows.Count > lambda)
                        {
                            this.chartLambda.Series[dataDescriptions[2]].Points.AddXY(i, table3.Rows[lambda][i]);
                            array[i] = (double)table3.Rows[lambda][i];
                        }
                    }
                    metaData[2] = new GraphMetaData 
                    {
                        Average = array.Average(),
                        StandardDeviation = getStandardDeviation(array.ToList<double>())
                    };
                }
            }
            if (data.Length >= 4)
            {
                if (data[3] != null && activeLines[3])
                {
                    table4 = data[3].getLagrangeDatatable();
                    double[] array = new double[table4.Rows.Count];
                    this.chartLambda.Series.Add(dataDescriptions[3]).ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                    this.chartLambda.Series[dataDescriptions[3]].Color = Color.Orange;
                    for (int i = 0; i < table4.Rows.Count; i++)
                    {
                        if (table4.Rows.Count > lambda)
                        {
                            this.chartLambda.Series[dataDescriptions[3]].Points.AddXY(i, table4.Rows[lambda][i]);
                            array[i] = (double)table4.Rows[lambda][i];
                        }
                    }
                    metaData[3] = new GraphMetaData 
                    {
                        Average = array.Average(),
                        StandardDeviation = getStandardDeviation(array.ToList<double>())
                    };
                }
            
            }
        }
        private void generateGraphs()
        {
            string[] filePaths = Directory.GetDirectories(resultsPath);
            InputData[] subGroups = new InputData[4];
            string[] descriptions = new string[]{"","","",""};
            int i = 0;
            foreach (string filePath in filePaths)
            {
                subGroups[i] = new InputData(new FileStream(filePath + "\\outPut.csv",FileMode.OpenOrCreate));
                descriptions[i] = Regex.Match(filePath, @"(.*)\\([^\\]*)").Groups[2].Value;
                i++;
            }

            for (int j = 0; j < 10; j++)
            {
                new Graph(subGroups, j, descriptions).Show();
            }
          
        }